Introduction à PyCasbin
PyCasbin est une bibliothèque d'autorisation légère écrite en Python qui prend en charge plusieurs modèles de contrôle d'accès comme ACL, RBAC et ABAC. Ce guide vous accompagne dans l'installation et l'utilisation basique de cette librairie.
Structure typique d'un projet PyCasbin
Voici l'organisation classique des fichiers dans un projet utilisant PyCasbin :
projet_pycasbin/
├── configurations/
│ ├── modele.conf # Fichier de configuration du modèle
│ └── regles.csv # Fichier contenant les règles d'autorisation
├── application/
│ └── demarrage.py # Point d'entrée principal
└── DOCUMENTATION.md # Informations générales sur le projet
Répertoire configurations/
modele.conf: Définit la logique du modèle d'autorisation utilisé par Casbin.regles.csv: Contient les autorisaitons concrètes sous forme de lignes définissant sujet, objet et action.
Répertoier application/
demarrage.py: Charge les configurations et effectue les vérifications d'accès.
Fichier principal de démarrage
Le fichier demarrage.py initialise l'environnement d'autorisation et permet de tester les permissions.
from casbin import Enforcer
def configurer_moteur(chemin_modele, chemin_regles):
"""
Crée une instance Enforcer avec les fichiers spécifiés
:param chemin_modele: Chemin vers le fichier modèle
:param chemin_regles: Chemin vers le fichier des règles
:return: Instance Enforcer configurée
"""
return Enforcer(chemin_modele, chemin_regles)
def verifier_droit(moteur, utilisateur, ressource, operation):
"""
Vérifie si un utilisateur peut accéder à une ressource donnée
:param moteur: Instance Enforcer active
:param utilisateur: Identifiant de l'utilisateur
:param ressource: Ressource cible
:param operation: Action demandée
:return: Booléen indiquant l'autorisation
"""
return moteur.enforce(utilisateur, ressource, operation)
if __name__ == '__main__':
# Initialisation du système
moteur_autorisations = configurer_moteur('configurations/modele.conf', 'configurations/regles.csv')
# Test d'une autorisation spécifique
if verifier_droit(moteur_autorisations, 'alice', 'donnees1', 'lecture'):
print("Alice est autorisée à lire données1.")
else:
print("Accès refusé.")
Fichiers de configuration
Fichier modèle modele.conf
Ce fichier définit comment sont interprétées les autorisations au sein du système :
[definition_requete]
r = utilisateur, cible, action
[definition_politique]
p = role_utilisateur, element_cible, action_permise
[definition_role]
g = _, _
[effet_politique]
e = some(where (p.eft == allow))
[evaluateurs]
m = g(r.utilisateur, p.role_utilisateur) && r.cible == p.element_cible && r.action == p.action_permise
Fichier des règles regles.csv
Les règles concrètes sont stockées ici :
p, administrateur, /administration/*, *
p, visiteur, /public/*
g, alice, administrateur
Dans cet exemple, Alice bénéficie des droits associés au rôle administrateur, lui permettant d'accéder à toutes les ressources situées sous /administration/*.