===================================== Authorization — ABAC (Vue d'ensemble) ===================================== Le système ABAC (Attribute-Based Access Control) implémente un moteur d'autorisation complet suivant l'architecture XACML avec 4 composants : - **PAP** (Policy Administration Point) : gestion des politiques via API - **PDP** (Policy Decision Point) : évaluation des politiques - **PEP** (Policy Enforcement Point) : enforcement dans les vues DRF - **PIP** (Policy Information Point) : résolution des attributs Architecture ABAC ================= .. code-block:: text Requête HTTP │ ▼ PEP (ABACPermission) │ ├── 1. Résout l'action DRF → ActionType ABAC │ ├── 2. Appelle PIP pour les attributs │ ├── Attributs sujet (user, roles, membership) │ ├── Attributs ressource (type, id, owner) │ └── Attributs environnement (heure, IP, tenant) │ ├── 3. Appelle PDP pour l'évaluation │ ├── Charge les politiques actives │ ├── Évalue les politiques statiques en premier │ ├── Filtre par resource_type et action │ ├── Évalue les conditions (JSON/Cedar/Casbin) │ └── Première politique matchée (par priorité) gagne │ └── 4. Applique la décision ├── ALLOW → continue vers la vue ├── DENY → AccessDeniedError (403) └── APPROVAL_REQUIRED → ApprovalRequiredError (202) Flux d'évaluation détaillé =========================== 1. Le **PEP** intercepte la requête dans ``has_permission()`` 2. Le **PIP** résout les attributs du sujet, de la ressource et de l'environnement 3. Le **PDP** évalue les politiques : a. Politiques statiques (superuser_full_access, suspended_deny_all) b. Politiques actives triées par priorité (décroissant) c. Pour chaque politique, les conditions sont évaluées par le moteur configuré d. La première politique qui matche détermine la décision 4. Si ``requires_approval=True`` sur la politique matchée, une ``ApprovalRequiredError`` est levée 5. L'événement ``AccessEvaluated`` est émis pour l'audit Exemple de politique ABAC ========================= .. code-block:: json { "name": "Finance can read invoices", "effect": "allow", "priority": 100, "actions": ["read", "list"], "resource_type": "Invoice", "subject_conditions": { "operator": "and", "conditions": [ {"attribute": "roles", "operator": "contains", "value": "finance"}, {"attribute": "status", "operator": "eq", "value": "active"} ] }, "resource_conditions": {}, "environment_conditions": {} }