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

Factory

src.module.authorization.infrastructure.condition_engines.get_condition_engine() ConditionEngine[source]

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

class src.module.authorization.infrastructure.condition_engines.json_engine.JSONConditionEngine(ConditionEngine)

Moteur par défaut. Évalue des conditions JSON structurées.

Opérateurs supportés :

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 :

{
    "operator": "and",
    "conditions": [
        {"attribute": "role", "operator": "eq", "value": "admin"},
        {"attribute": "level", "operator": "gte", "value": 3}
    ]
}
{
    "operator": "or",
    "conditions": [
        {"attribute": "role", "operator": "eq", "value": "admin"},
        {"attribute": "is_superuser", "operator": "eq", "value": true}
    ]
}
{
    "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

class src.module.authorization.infrastructure.condition_engines.cedar_engine.CedarConditionEngine(ConditionEngine)[source]

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.

permit(
    principal == User::"admin",
    action == Action::"read",
    resource in Folder::"documents"
);

Configuration :

MULTITENANT = {
    'ABAC_CONDITION_ENGINE': 'cedar',
}

Casbin Engine

Module : src.module.authorization.infrastructure.condition_engines.casbin_engine

class src.module.authorization.infrastructure.condition_engines.casbin_engine.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 :

MULTITENANT = {
    'ABAC_CONDITION_ENGINE': 'casbin',
}