
Bibliothèque d'autorisation appliquant les modèles ACL, RBAC, ABAC et de contrôle d'accès personnalisés, avec des API RESTful de correspondance et de gestion des politiques pour applications et services.
Nouvelle : vous vous demandez toujours comment écrire la bonne politique Apache Casbin ? Apache Casbin online editor est là pour vous aider ! Essayez-le sur : https://casbin.apache.org/editor/

Apache Casbin est une bibliothèque de contrôle d'accès open-source puissante et efficace pour les projets Golang. Elle permet d'appliquer une autorisation basée sur différents modèles de contrôle d'accès.
write-article, read-log. Cela ne contrôle pas l'accès à un article ou un journal spécifique.resource.Owner peut être utilisé pour obtenir l'attribut d'une ressource./res/*, /res/:id et des méthodes HTTP comme GET, POST, , .Dans Casbin, un modèle de contrôle d'accès est abstrait dans un fichier CONF basé sur le métamodèle PERM (Policy, Effect, Request, Matchers). Ainsi, changer ou mettre à niveau le mécanisme d'autorisation d'un projet est aussi simple que de modifier une configuration. Vous pouvez personnaliser votre propre modèle de contrôle d'accès en combinant les modèles disponibles. Par exemple, vous pouvez réunir les rôles RBAC et les attributs ABAC dans un même modèle et partager un ensemble de règles de politique.
Le modèle le plus basique et le plus simple de Casbin est l'ACL. Le fichier CONF du modèle ACL est :
# Request definition
[request_definition]
r = sub, obj, act
# Policy definition
[policy_definition]
p = sub, obj, act
# Policy effect
[policy_effect]
e = some(where (p.eft == allow))
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Un exemple de politique pour le modèle ACL ressemble à :
p, alice, data1, read
p, bob, data2, write
Cela signifie :
Nous prenons également en charge le mode multiligne en ajoutant '\' à la fin :
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
De plus, si vous utilisez ABAC, vous pouvez essayer l'opérateur in comme suit dans l'édition Casbin golang (jCasbin et Node-Casbin ne sont pas encore pris en charge) :
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Mais vous DEVEZ vous assurer que la longueur du tableau est SUPÉRIEURE à 1, sinon cela provoquera un panic.
Pour plus d'opérateurs, vous pouvez jeter un œil à govaluate
Ce que fait Apache Casbin :
{subject, object, action} ou sous une forme personnalisée comme vous l'avez définie, les autorisations d'accord et de refus étant toutes deux prises en charge.root ou administrator. Un superutilisateur peut tout faire sans permissions explicites.keyMatch peut mapper une clé de ressource /foo/bar vers le motif /foo*.Ce que Apache Casbin ne fait PAS :
username et password lorsqu'un utilisateur se connecte)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
Vous pouvez également utiliser l'éditeur en ligne (https://casbin.apache.org/editor/) pour écrire votre modèle et votre politique Casbin dans votre navigateur web. Il fournit des fonctionnalités telles que syntax highlighting et code completion, tout comme un IDE pour un langage de programmation.
https://casbin.apache.org/docs/tutorials
Créez un enforcer Casbin avec un fichier de modèle et un fichier de politique :
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Remarque : vous pouvez également initialiser un enforcer avec une politique en base de données au lieu d'un fichier, voir la section Persistance des politiques pour plus de détails.
Ajoutez un hook d'application dans votre code juste avant que l'accès ne se produise :
sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.
if res, _ := e.Enforce(sub, obj, act); res {
// permit alice to read data1
} else {
// deny the request, show an error
}
Outre le fichier de politique statique, Apache Casbin fournit également une API pour la gestion des permissions à l'exécution. Par exemple, vous pouvez obtenir tous les rôles assignés à un utilisateur comme ci-dessous :
roles, _ := e.GetImplicitRolesForUser(sub)
Voir API de gestion des politiques pour plus d'utilisations.
Apache Casbin fournit deux ensembles d'API pour gérer les permissions :
Nous fournissons également une interface web pour la gestion des modèles et la gestion des politiques :


https://casbin.apache.org/docs/adapters
https://casbin.apache.org/docs/watchers
https://casbin.apache.org/docs/role-managers
https://casbin.apache.org/docs/benchmark
Middlewares d'autorisation pour les frameworks web : https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Merci de lire le guide de contribution.
Ce projet existe grâce à toutes les personnes qui contribuent.
Ce projet est distribué sous la licence Apache 2.0.
Si vous avez des problèmes ou des demandes de fonctionnalités, n'hésitez pas à nous contacter. Les PR sont les bienvenues.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| prêt pour la production | prêt pour la production | prêt pour la production | prêt pour la production |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| prêt pour la production | prêt pour la production | prêt pour la production | prêt pour la production |
PUTDELETE| Modèle | Fichier de modèle | Fichier de politique |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL avec superutilisateur | basic_model_with_root.conf | basic_policy.csv |
| ACL sans utilisateurs | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL sans ressources | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC avec rôles de ressources | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC avec domaines/locataires | rbac_model_with_domains.conf | rbac_policy_with_domains.csv |
| ABAC | abac_model.conf | N/A |
| RESTful | keymatch_model.conf | keymatch_policy.csv |
| Deny-override | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Priorité | priority_model.conf | priority_policy.csv |