corentin_wakdo/docs/domaines/rbac.md
Corentin JOGUET 32f9baacce
All checks were successful
CI / secret-scan (push) Successful in 8s
CI / php-lint (push) Successful in 20s
CI / static-tests (push) Successful in 41s
CI / js-tests (push) Successful in 19s
CI / auto-merge (push) Has been skipped
docs(domaines): documentation par domaine fonctionnel (7 fiches) (#44)
2026-06-17 15:55:30 +02:00

1.5 KiB

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 (PIN + audit), ADR-0006 (409).

Tables

role, permission, role_permission, role_visible_source, audit_log. Detail : docs/merise/mlt.md section 10.4.