Tmavý režim
Systém oprávnění — přehled
Atrea User API implementuje flexibilní systém oprávnění s rolemi, hierarchickými oprávněními a resource-level overrides.
Základní koncepty
Aplikace (Applications)
Vše je organizováno per-aplikaci. Každá aplikace má vlastní sadu rolí a oprávnění. Aplikace je identifikována unikátním code (např. atrea-panel, vallox-app).
Oprávnění (Permissions)
Konkrétní akce, které lze povolit nebo zakázat. Definovány per-aplikaci s unikátním code.
Příklady: documents.read, documents.edit, users.manage, reports.view
Role
Sady oprávnění. Uživatel dostane role → role mu přinese oprávnění.
Příklady: viewer, editor, manager, admin
Vztah User → Role → Oprávnění
Uživatel (email)
└── UserAppRole (email, app, role_id)
└── Role
└── RolePermission (role_id, permission_id, access_level)
└── Permission (code, type)Jak funguje check oprávnění
Backend aplikace se ptá jednoduše:
bash
POST /api/check
{
"email": "uzivatel@firma.cz",
"app": "moje-app",
"permission": "documents.edit"
}
# Odpověď
{ "data": { "allowed": true } }Uvnitř API proběhne:
- Kontrola aktivity uživatele
- Kontrola superadmin statusu
- Hledání resource-level overrides
- Hledání oprávnění přes role uživatele
- Cache výsledku (30 s TTL)
Viz Vyhodnocení oprávnění pro detaily.
Typy oprávnění
| Typ | Hodnoty | Popis |
|---|---|---|
binary | zakázáno / povoleno | Jednoduché ano/ne |
tiered | zakázáno / view / edit | Granulární přístup |
Viz Typy oprávnění pro detaily.
Resource-level overrides
Pro přesné ovládání (např. sdílení konkrétního dokumentu) slouží resource-level overrides:
bash
# Přidejte explicitní přístup k dokumentu #42
PUT /api/users/:email/apps/:appCode/resources/document/42/permissions
{ "permissions": [{ "permissionId": 5, "granted": true }] }Override přepíše globální role — umožňuje grantu nebo explicitnímu zamítnutí.
Hierarchie oprávnění (UI)
Oprávnění podporují parent-child vztah pro přehledné zobrazení ve správě:
documents (rodič, skrytý)
├── documents.read (binary)
└── documents.edit (tiered: view/edit)
users
├── users.view (binary)
└── users.manage (tiered)parent_permission_id slouží pouze pro UI groupování — nemá vliv na evaluaci.
Správa oprávnění
bash
# Vytvoření oprávnění (vyžaduje AppAdmin)
POST /api/applications/:appCode/permissions
{
"code": "documents.edit",
"description": "Editace dokumentů",
"type": "tiered",
"groupName": "Dokumenty"
}
# Přiřazení oprávnění roli
PUT /api/applications/:appCode/roles/:roleId/permissions
{
"permissions": [
{ "permissionId": 1, "accessLevel": "edit" },
{ "permissionId": 2, "accessLevel": "view" }
]
}Diagram celého systému
┌─────────────────────────────────────────────────────────┐
│ Application │
│ (code: "crm") │
└────────┬──────────────────────┬───────────────────────┘
│ │
┌────▼─────┐ ┌────▼──────────────┐
│ Permission│ │ Role │
│ (binary/ │ │ (code: "editor") │
│ tiered) │ └────────┬──────────┘
└────┬─────┘ │
│ ┌─────▼───────────────┐
└────────────────────│ RolePermission │
│ (access_level) │
└──────────────────────┘
│
┌──────────▼──────────────┐
│ UserAppRole │
│ (email → app → role) │
└──────────────────────────┘
│
┌──────────▼──────────────┐
│ UserResourcePermission │
│ (email, resource, perm) │
└──────────────────────────┘Viz také
- Typy oprávnění — binary vs tiered, access_level
- Vyhodnocení — priorita, superadmin, overrides
- Cache — LRU cache, invalidace
- API: /check — endpointy pro ověřování
- API: Role & Oprávnění — správa rolí a oprávnění