Skip to content

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:

  1. Kontrola aktivity uživatele
  2. Kontrola superadmin statusu
  3. Hledání resource-level overrides
  4. Hledání oprávnění přes role uživatele
  5. Cache výsledku (30 s TTL)

Viz Vyhodnocení oprávnění pro detaily.

Typy oprávnění

TypHodnotyPopis
binaryzakázáno / povolenoJednoduché ano/ne
tieredzakázáno / view / editGranulá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í.

Viz Vyhodnocení oprávnění.

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é

Atrea User API — interní dokumentace