# Roluri și drepturi

Accesul se construiește în trei straturi - rolul în firmă, drepturile fine și paginile bifate pentru fiecare om.

## Cele trei straturi

| Strat | Unde stă | Exemplu |
| --- | --- | --- |
| Rol | `acces_firma(cont_id, firma_id, rol)` | Ana este `marketing` în Ilustromania |
| Drepturi fine | `drepturi_cont(cont_id, firma_id, drept)` | Dan are în plus dreptul de a edita meniul |
| Pagini | lista de pagini a omului pe firmă | Dan vede și pagina **Stoc**, dar nu **Facturi** |

Rolul dă punctul de plecare. Drepturile fine și paginile îl ajustează pentru un om anume, fără să inventezi un rol nou.

## Rolurile

| Rol | Folosire obișnuită |
| --- | --- |
| `admin` | administrează oamenii, drepturile, modulele și setările firmei |
| `patron` | proprietarul afacerii |
| `finante` | facturi, plăți, evidență |
| `gestiune` | stoc, recepții, furnizori |
| `bucatar` | meniu, rețete, ingrediente |
| `casier` | vânzare, casa de marcat |
| `marketing` | social media, reclame, recenzii |
| `angajat` | acces de bază |

Acestea sunt cele 8 roluri de firmă. Separat există `executor`, rolul tehnic al jetoanelor de serviciu ale agenților de pe server: nu se dă unui om și nu apare în pagina **Acces**.

> [!NOTE]
> O rută cu acces `rol:admin` cere exact rolul `admin` pe firma activă. Nu există moștenire implicită între roluri: `patron` nu primește automat ce are `admin`.

## Roluri de echipă

Pe lângă rolurile fixe, firma își poate defini **roluri de echipă** proprii (de exemplu „Social Media”), cu paginile și notificările lor. Se gestionează din pagina **Acces** și au rutele `/v1/acces/roluri-echipa`.

## Cum decide platforma

Fiecare rută își declară accesul. Ordinea verificării:

1. Ruta are acces declarat? Dacă nu: `401 ruta_nedeclarata`.
2. Accesul este `public`? Atunci cererea trece.
3. Există o sesiune validă (sau un jeton `mcp_`)? Dacă nu: `401`.
4. Accesul cere un rol (`rol:<rol>`)? Rolul omului pe firma activă trebuie să fie exact acela, altfel `403`.
5. Modulul își face apoi propriile verificări (modul activ, drept fin), tot cu `403` la refuz.

**Distribuția rutelor pe acces**
Distribuția actuală a celor 307 de rute:

| Acces | Rute |
| --- | --- |
| `sesiune` | 203 |
| `rol:admin` | 78 |
| `public` | 26 |

Cifrele sunt calculate la generarea documentației, din harta de acces a codului.
