Authorization — Politiques (PAP/PDP)¶
Le PAP (Policy Administration Point) gère les politiques via l’API REST. Le PDP (Policy Decision Point) évalue les politiques contre les attributs.
Modèle Policy (PAP)¶
Module : src.module.authorization.infrastructure.models
- class src.module.authorization.infrastructure.models.Policy(TranslatableModel)¶
Politique ABAC définissant les règles d’accès. Traduisible via django-parler.
- name: CharField¶
Identifiant programmatique de la politique (non traduit, utilisé dans les logs et l’évaluation ABAC).
- display_name: CharField(traduit)¶
Nom d’affichage traduisible (ex:
"Les financiers peuvent lire les factures").
- description: TextField(traduit)¶
Description détaillée traduisible de la politique.
- Table:
mt_policy/mt_policy_translation
- effect: CharField¶
"allow"ou"deny". UtilisePolicyEffect.
- priority: IntegerField¶
Priorité d’évaluation. Plus élevée = évaluée en premier.
- is_active: BooleanField¶
- actions: JSONField¶
Liste d’actions (ex:
["read", "update", "delete"]).
- resource_type: CharField¶
Type de ressource ciblé (ex:
"Invoice","Document","*").
- resource_id: UUIDField(nullable)¶
Si défini, politique au niveau objet (une ressource spécifique).
- subject_conditions: JSONField¶
Conditions sur le sujet (utilisateur, rôles, attributs).
- resource_conditions: JSONField¶
Conditions sur la ressource (propriétaire, statut).
- environment_conditions: JSONField¶
Conditions sur l’environnement (heure, IP, géo).
- scope: CharField¶
"global"(tous les tenants) ou"tenant"(tenant spécifique).
- requires_approval: BooleanField¶
Si
True, l’action nécessite une approbation avant exécution.
- approval_config: JSONField¶
Configuration d’approbation :
{ "required_approvals": 2, "approver_roles": ["admin", "manager"], "expiration_hours": 48, "auto_execute": true }
- version: IntegerField¶
Verrouillage optimiste — incrémenté à chaque modification.
- class src.module.authorization.infrastructure.models.AttributeDefinition(TranslatableModel)¶
Catalogue des attributs disponibles pour les conditions ABAC. Traduisible via django-parler.
- name: CharField(unique=True)¶
Identifiant programmatique de l’attribut (non traduit).
- display_name: CharField(traduit)¶
Nom d’affichage traduisible.
- description: TextField(traduit)¶
Description traduisible de l’attribut.
- attribute_type: CharField¶
"subject","resource","environment"
- data_type: CharField¶
"string","integer","boolean","list","json"
- allowed_values: JSONField(nullable)¶
- Table:
mt_attribute_definition/mt_attribute_definition_translation
PDP — Policy Decision Point¶
Module : src.module.authorization.domain.services
- class src.module.authorization.domain.services.PolicyEvaluationService[source]¶
Évalue les politiques ABAC avec un algorithme basé sur la priorité.
Algorithme d’évaluation :
Charge les politiques statiques (système)
Charge les politiques actives depuis la DB
Trie par priorité (décroissant)
Pour chaque politique :
Vérifie que
resource_typematche (ou"*")Vérifie que l’action est dans
actionsÉvalue
subject_conditionsvia le moteur de conditionsÉvalue
resource_conditionsvia le moteur de conditionsÉvalue
environment_conditionsvia le moteur de conditions
Première politique matchée → décision retournée
Si aucune politique ne matche →
ABAC_DEFAULT_EFFECT
- evaluate(request: EvaluationRequest) → EvaluationResult[source]¶
Évalue une requête d’accès.
- Parameters:
request – Requête d’évaluation ABAC
- Returns:
Résultat avec décision, politique matchée, raison
Politiques statiques¶
Module : src.module.authorization.domain.static_policies
- src.module.authorization.domain.static_policies.STATIC_POLICIES¶
Liste des politiques système évaluées en premier :
superuser_full_access (priorité 10000) : Les superusers ont accès à tout
suspended_deny_all (priorité 9999) : Les utilisateurs suspendus n’ont accès à rien
Ces politiques ne peuvent pas être désactivées ou modifiées.
API REST (PAP)¶
- class src.module.authorization.domain.static_policies.PolicyViewSet(ModelViewSet)¶
CRUD des politiques ABAC.
GET/POST /api/v1/policies/GET/PUT/PATCH/DELETE /api/v1/policies/<id>/Actions supplémentaires :
POST /api/v1/policies/<id>/test/: teste une politique avec des attributs simulés