
Biblioteca de autorização que aplica modelos de controle de acesso ACL, RBAC, ABAC e personalizados, com APIs RESTful de correspondência e gerenciamento de políticas para aplicações e serviços.
Notícias: ainda se preocupa em como escrever a política correta do Apache Casbin? O Apache Casbin online editor está chegando para ajudar! Experimente em: https://casbin.apache.org/editor/

O Apache Casbin é uma biblioteca de controle de acesso de código aberto, poderosa e eficiente, para projetos Golang. Ela fornece suporte para aplicar autorização com base em vários modelos de controle de acesso.
write-article, read-log. Isso não controla o acesso a um artigo ou log específico.resource.Owner pode ser usado para obter o atributo de um recurso./res/*, /res/:id e métodos HTTP como GET, POST, , .No Casbin, um modelo de controle de acesso é abstraído em um arquivo CONF baseado no metamodelo PERM (Policy, Effect, Request, Matchers). Dessa forma, alternar ou atualizar o mecanismo de autorização de um projeto é tão simples quanto modificar uma configuração. Você pode personalizar seu próprio modelo de controle de acesso combinando os modelos disponíveis. Por exemplo, você pode obter papéis RBAC e atributos ABAC juntos dentro de um único modelo e compartilhar um mesmo conjunto de regras de política.
O modelo mais básico e simples no Casbin é o ACL. O CONF do modelo 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
Um exemplo de política para o modelo ACL é:
p, alice, data1, read
p, bob, data2, write
Isso significa:
Também suportamos o modo multilinha adicionando '\' ao final:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Além disso, se você estiver usando ABAC, pode tentar o operador in da seguinte forma na edição golang do Casbin (jCasbin e Node-Casbin ainda não são suportados):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Mas você DEVE garantir que o comprimento do array seja MAIOR que 1; caso contrário, isso causará um panic.
Para mais operadores, você pode dar uma olhada em govaluate
O que o Apache Casbin faz:
{subject, object, action} ou em uma forma personalizada, conforme você definiu; autorizações de permitir e negar são suportadas.root ou administrator. Um superusuário pode fazer qualquer coisa sem permissões explícitas.keyMatch pode mapear uma chave de recurso /foo/bar para o padrão /foo*.O que o Apache Casbin NÃO faz:
username e password quando um usuário faz login)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
Você também pode usar o editor online (https://casbin.apache.org/editor/) para escrever seu modelo e política do Casbin no seu navegador. Ele fornece funcionalidades como syntax highlighting e code completion, assim como uma IDE para uma linguagem de programação.
https://casbin.apache.org/docs/tutorials
Crie um novo enforcer do Casbin com um arquivo de modelo e um arquivo de política:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Nota: você também pode inicializar um enforcer com política no banco de dados em vez de arquivo; consulte a seção Persistência de políticas para obter detalhes.
Adicione um hook de enforcement ao seu código logo antes de o acesso ocorrer:
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
}
Além do arquivo de política estático, o Apache Casbin também fornece uma API para gerenciamento de permissões em tempo de execução. Por exemplo, você pode obter todos os papéis atribuídos a um usuário da seguinte forma:
roles, _ := e.GetImplicitRolesForUser(sub)
Consulte APIs de gerenciamento de políticas para mais usos.
O Apache Casbin fornece dois conjuntos de APIs para gerenciar permissões:
Também fornecemos uma interface web para gerenciamento de modelos e de políticas:


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 de autorização para frameworks web: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Leia o guia de contribuição.
Este projeto existe graças a todas as pessoas que contribuem.
Este projeto está licenciado sob a licença Apache 2.0.
Se você tiver algum problema ou solicitação de recurso, entre em contato conosco. PRs são bem-vindos.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| pronto para produção | pronto para produção | pronto para produção | pronto para produção |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| pronto para produção | pronto para produção | pronto para produção | pronto para produção |
PUTDELETE| Modelo | Arquivo de modelo | Arquivo de política |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL com superusuário | basic_model_with_root.conf | basic_policy.csv |
| ACL sem usuários | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL sem recursos | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC com papéis de recursos | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC com domínios/tenants | 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 |
| Prioridade | priority_model.conf | priority_policy.csv |