corentin_wakdo/docs/domaines/rbac.md
Imugiii f7caf2d50c
All checks were successful
CI / secret-scan (pull_request) Successful in 9s
CI / php-lint (pull_request) Successful in 21s
CI / static-tests (pull_request) Successful in 44s
CI / js-tests (pull_request) Successful in 17s
CI / auto-merge (pull_request) Successful in 5s
docs(domaines): documentation par domaine fonctionnel (7 fiches)
docs/domaines/ : une fiche par domaine livre (perimetre / ce qui est livre / regles
metier RG-T* / decisions -> ADR / tables), + index.

auth, catalogue, stock-recettes, users, rbac, stats, borne. Commande = P4 (schema pret,
non documentee ici). Troisieme et derniere PR du jeu de documentation socle.
2026-06-17 13:53:56 +00:00

30 lines
1.5 KiB
Markdown

# Domaine — RBAC (roles & permissions)
## Perimetre
Gestion des roles et de la matrice role/permission (mlt 10.4 MANAGE_RBAC), permission
`role.manage`. Catalogue de permissions fige au seed (lecture seule).
## Ce qui est livre
- `RoleRepository` (App\Auth) : roles (CRUD, code immuable), permissions (lecture),
matrice (`permissionIdsFor`/`permissionCodesFor`, `setPermissions` tx +
`replacePermissions` raw), `role_visible_source` (`setVisibleSources` / raw).
- `RoleController` (`role.manage`) : index, create/store (role custom RG-4), edit/update
(champs role + matrice + sources visibles en UNE transaction). Vues `admin/roles/{index,form}`.
- Matrice soumise en champs **scalaires** (`perm_<id>`, `source_<enum>`) : `Request::formBody`
ne garde que les scalaires (pas de `name[]`, pas de JS).
## Regles metier
- RG-6 (mlt 10.4) : PIN equipier + `audit_log` (`role.manage`) dans une transaction ;
`details` JSON = **diff** des codes de permission (ajoutes/retires), calcule avant la
reecriture delete-and-reinsert.
- `Authorizer::can` recharge les permissions a chaque verification (effet immediat).
- Garde-fous anti-lockout : le role `admin` conserve `role.manage` ET reste actif ;
`code` immuable apres creation ; `order_source` borne a l'ENUM ; code dupli -> 409.
## Decisions
[ADR-0004](../adr/0004-pin-action-sensible-audit.md) (PIN + audit),
[ADR-0006](../adr/0006-http-409-conflit-422-validation.md) (409).
## Tables
`role`, `permission`, `role_permission`, `role_visible_source`, `audit_log`. Detail :
`docs/merise/mlt.md` section 10.4.