============================================ Authorization — Moteurs de Conditions ============================================ Les moteurs de conditions évaluent les conditions ABAC des politiques. Trois moteurs pluggables sont disponibles. Module : ``src.module.authorization.infrastructure.condition_engines`` .. module:: src.module.authorization.infrastructure.condition_engines :synopsis: Moteurs d'évaluation de conditions ABAC pluggables Factory ======= .. function:: get_condition_engine() -> ConditionEngine Retourne le moteur de conditions configuré. Lit ``MULTITENANT['ABAC_CONDITION_ENGINE']``. :raises ConfigurationError: Si le type de moteur est inconnu. JSON Engine (défaut) ===================== Module : ``src.module.authorization.infrastructure.condition_engines.json_engine`` .. module:: src.module.authorization.infrastructure.condition_engines.json_engine :synopsis: Moteur de conditions JSON natif .. class:: JSONConditionEngine(ConditionEngine) Moteur par défaut. Évalue des conditions JSON structurées. **Opérateurs supportés :** .. list-table:: :header-rows: 1 :widths: 20 40 40 * - Opérateur - Description - Exemple * - ``eq`` - Égalité stricte - ``{"attribute": "role", "operator": "eq", "value": "admin"}`` * - ``neq`` - Inégalité - ``{"attribute": "status", "operator": "neq", "value": "suspended"}`` * - ``gt`` - Plus grand que - ``{"attribute": "level", "operator": "gt", "value": 3}`` * - ``gte`` - Plus grand ou égal - ``{"attribute": "age", "operator": "gte", "value": 18}`` * - ``lt`` - Plus petit que - ``{"attribute": "attempts", "operator": "lt", "value": 5}`` * - ``lte`` - Plus petit ou égal - ``{"attribute": "risk_score", "operator": "lte", "value": 0.7}`` * - ``in`` - Inclusion dans une liste - ``{"attribute": "role", "operator": "in", "value": ["admin", "manager"]}`` * - ``not_in`` - Exclusion d'une liste - ``{"attribute": "status", "operator": "not_in", "value": ["banned"]}`` * - ``contains`` - Contient (pour les listes) - ``{"attribute": "roles", "operator": "contains", "value": "admin"}`` * - ``regex`` - Expression régulière - ``{"attribute": "email", "operator": "regex", "value": ".*@acme\\.com$"}`` * - ``exists`` - L'attribut existe - ``{"attribute": "department", "operator": "exists", "value": true}`` **Opérateurs logiques :** .. code-block:: json { "operator": "and", "conditions": [ {"attribute": "role", "operator": "eq", "value": "admin"}, {"attribute": "level", "operator": "gte", "value": 3} ] } .. code-block:: json { "operator": "or", "conditions": [ {"attribute": "role", "operator": "eq", "value": "admin"}, {"attribute": "is_superuser", "operator": "eq", "value": true} ] } .. code-block:: json { "operator": "not", "condition": {"attribute": "status", "operator": "eq", "value": "suspended"} } **Protections :** - Profondeur maximale configurable (``ABAC_MAX_CONDITION_DEPTH``) - Nombre max de conditions par politique (``ABAC_MAX_CONDITIONS_PER_POLICY``) - Timeout regex (``ABAC_REGEX_TIMEOUT_MS``) Cedar Engine ============= Module : ``src.module.authorization.infrastructure.condition_engines.cedar_engine`` .. module:: src.module.authorization.infrastructure.condition_engines.cedar_engine :synopsis: Moteur Cedar pour les politiques de production .. class:: CedarConditionEngine(ConditionEngine) Moteur utilisant le langage Cedar d'Amazon. **Prérequis :** ``pip install cedarpy`` Cedar est un langage de politique formellement vérifié, recommandé pour les déploiements de production avec des politiques complexes. .. code-block:: cedar permit( principal == User::"admin", action == Action::"read", resource in Folder::"documents" ); **Configuration :** .. code-block:: python MULTITENANT = { 'ABAC_CONDITION_ENGINE': 'cedar', } Casbin Engine ============== Module : ``src.module.authorization.infrastructure.condition_engines.casbin_engine`` .. module:: src.module.authorization.infrastructure.condition_engines.casbin_engine :synopsis: Moteur Casbin pour RBAC/ABAC .. class:: CasbinConditionEngine(ConditionEngine) Moteur utilisant Casbin pour le RBAC/ABAC. **Prérequis :** ``pip install casbin`` Casbin supporte de nombreux modèles d'accès (ACL, RBAC, ABAC) avec des enforcers cachés par tenant. **Configuration :** .. code-block:: python MULTITENANT = { 'ABAC_CONDITION_ENGINE': 'casbin', }