Authorization — PEP et Décorateurs¶
Le PEP (Policy Enforcement Point) intègre le moteur ABAC dans les vues DRF via des permissions et des décorateurs.
Module : src.module.authorization.infrastructure.permissions
Permissions DRF¶
- class src.module.authorization.infrastructure.permissions.ABACPermission(BasePermission)¶
Permission DRF qui évalue les politiques ABAC pour chaque requête.
À ajouter dans
permission_classesd’un ViewSet :from src.module.authorization.infrastructure.permissions import ABACPermission class InvoiceViewSet(ModelViewSet): permission_classes = [IsAuthenticated, ABACPermission] queryset = Invoice.objects.all()
- class src.module.authorization.infrastructure.permissions.IsTenantMember(BasePermission)¶
Vérifie que l’utilisateur a une membership active dans le tenant courant.
- class src.module.authorization.infrastructure.permissions.IsTenantAdmin(BasePermission)¶
Vérifie que l’utilisateur a le rôle
"admin"dans le tenant courant.
- class src.module.authorization.infrastructure.permissions.IsApprover(BasePermission)¶
Vérifie que l’utilisateur est un approbateur autorisé.
Fonctions d’évaluation¶
- src.module.authorization.infrastructure.permissions.evaluate_abac(action, resource_type, resource_id=None, subject_attributes=None, resource_attributes=None, environment_attributes=None) → EvaluationResult¶
Évalue une requête d’accès contre les politiques ABAC.
- Parameters:
action – Action ABAC (
"read","create","update","delete")resource_type – Type de ressource (ex:
"Invoice")resource_id – ID de la ressource (optionnel, pour les politiques object-level)
- Returns:
EvaluationResultavec la décision et les détails
- src.module.authorization.infrastructure.permissions.check_abac(action, resource_type, resource_id=None) → None¶
Raccourci qui lève
AccessDeniedErrorsi l’accès est refusé.from src.module.authorization.infrastructure.permissions import check_abac def transfer_funds(source, destination, amount): check_abac("update", "BankAccount", str(source.id)) # Si on arrive ici, l'accès est autorisé source.transfer(destination, amount)
Décorateur @abac_required¶
Module : src.module.authorization.infrastructure.decorators
- src.module.authorization.infrastructure.decorators.abac_required(action: str, resource_type: str)[source]¶
Décorateur pour protéger des vues ou méthodes de service avec ABAC.
- Parameters:
action – Action ABAC requise
resource_type – Type de ressource protégé
Sur une vue DRF :
from src.module.authorization.infrastructure.decorators import abac_required class ReportViewSet(ViewSet): @abac_required("read", "FinancialReport") def list(self, request): reports = FinancialReport.objects.all() return Response(ReportSerializer(reports, many=True).data) @abac_required("create", "FinancialReport") def create(self, request): ...
Sur une méthode de service :
class InvoiceService: @abac_required("delete", "Invoice") def delete_invoice(self, invoice_id): invoice = Invoice.objects.get(id=invoice_id) invoice.delete()
Si l’accès est refusé, lève
AccessDeniedError(→ HTTP 403). Si une approbation est requise, lèveApprovalRequiredError(→ HTTP 202).
Value Objects d’évaluation¶
Module : src.module.authorization.domain.value_objects
- class src.module.authorization.domain.value_objects.EvaluationRequest[source]¶
Requête d’évaluation ABAC.
- Champs:
action,resource_type,resource_id,subject_attributes,resource_attributes,environment_attributes