
Libreria di autorizzazione che applica modelli di controllo degli accessi ACL, RBAC, ABAC e personalizzati, con API RESTful di corrispondenza e gestione delle policy per applicazioni e servizi.
Novità: sei ancora preoccupato di come scrivere la policy Apache Casbin corretta? Apache Casbin online editor sta arrivando per aiutarti! Provalo su: https://casbin.apache.org/editor/

Apache Casbin è una libreria open-source potente ed efficiente per il controllo degli accessi in progetti Golang. Supporta l'applicazione dell'autorizzazione basata su vari modelli di controllo degli accessi.
write-article, read-log. Questo non controlla l'accesso a un articolo o log specifico.resource.Owner può essere usato per ottenere l'attributo di una risorsa./res/*, /res/:id e metodi HTTP come GET, POST, PUT, .In Casbin, un modello di controllo degli accessi viene astratto in un file CONF basato sul metamodello PERM (Policy, Effect, Request, Matchers). Passare da un meccanismo di autorizzazione a un altro o aggiornarlo in un progetto è quindi semplice quanto modificare una configurazione. Puoi personalizzare il tuo modello di controllo degli accessi combinando i modelli disponibili. Ad esempio, puoi avere ruoli RBAC e attributi ABAC insieme in un unico modello e condividere uno stesso insieme di regole della policy.
Il modello più semplice e basilare in Casbin è l'ACL. Il CONF del modello ACL è:
# 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 esempio di policy per il modello ACL è:
p, alice, data1, read
p, bob, data2, write
Ciò significa:
Supportiamo anche la modalità multi-linea aggiungendo '\' alla fine:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Inoltre, se stai usando ABAC, puoi provare l'operatore in come segue nell'edizione golang di Casbin (jCasbin e Node-Casbin non sono ancora supportati):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Ma DEVI assicurarti che la lunghezza dell'array sia MAGGIORE di 1, altrimenti causerà un panic.
Per altri operatori, puoi dare un'occhiata a govaluate
Cosa fa Apache Casbin:
{subject, object, action} o in una forma personalizzata come definita da te; sono supportate sia le autorizzazioni allow che deny.root o administrator. Un superutente può fare qualsiasi cosa senza permessi espliciti.keyMatch può mappare una chiave di risorsa /foo/bar al pattern /foo*.Cosa Apache Casbin NON fa:
username e password quando un utente accede)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
Puoi anche usare l'editor online (https://casbin.apache.org/editor/) per scrivere il tuo modello e la tua policy Casbin nel browser. Offre funzionalità come syntax highlighting e code completion, proprio come un IDE per un linguaggio di programmazione.
https://casbin.apache.org/docs/tutorials
Crea un enforcer Casbin con un file di modello e un file di policy:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Nota: puoi anche inizializzare un enforcer con una policy nel database invece che in un file; consulta la sezione Persistenza delle policy per i dettagli.
Aggiungi un hook di enforcement al tuo codice subito prima che avvenga l'accesso:
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
}
Oltre al file di policy statico, Apache Casbin fornisce anche API per la gestione dei permessi a runtime. Ad esempio, puoi ottenere tutti i ruoli assegnati a un utente come segue:
roles, _ := e.GetImplicitRolesForUser(sub)
Consulta le API di gestione delle policy per ulteriori utilizzi.
Apache Casbin fornisce due serie di API per gestire i permessi:
Forniamo anche una UI basata sul web per la gestione di modelli e policy:


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
Middleware Authz per framework web: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Leggi la guida al contributo.
Questo progetto esiste grazie a tutte le persone che contribuiscono.
Questo progetto è concesso in licenza secondo la licenza Apache 2.0.
Se hai problemi o richieste di funzionalità, contattaci. Le PR sono benvenute.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| pronto per la produzione | pronto per la produzione | pronto per la produzione | pronto per la produzione |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| pronto per la produzione | pronto per la produzione | pronto per la produzione | pronto per la produzione |
DELETE| Modello | File del modello | File della policy |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL con superutente | basic_model_with_root.conf | basic_policy.csv |
| ACL senza utenti | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL senza risorse | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC con ruoli delle risorse | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC con domini/tenant | 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 |