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". Utilise PolicyEffect.

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 :

  1. Charge les politiques statiques (système)

  2. Charge les politiques actives depuis la DB

  3. Trie par priorité (décroissant)

  4. Pour chaque politique :

    1. Vérifie que resource_type matche (ou "*")

    2. Vérifie que l’action est dans actions

    3. Évalue subject_conditions via le moteur de conditions

    4. Évalue resource_conditions via le moteur de conditions

    5. Évalue environment_conditions via le moteur de conditions

  5. Première politique matchée → décision retournée

  6. 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