
Biblioteca de autorización que aplica modelos de control de acceso personalizados, ACL, RBAC y ABAC, con APIs RESTful de coincidencia y gestión de políticas para aplicaciones y servicios.
Noticias: ¿aún te preocupa cómo escribir la política correcta de Apache Casbin? ¡Apache Casbin online editor viene a ayudarte! Pruébalo en: https://casbin.apache.org/editor/

Apache Casbin es una biblioteca de control de acceso de código abierto, potente y eficiente, para proyectos Golang. Proporciona soporte para aplicar la autorización basada en diversos modelos de control de acceso.
write-article, read-log. No controla el acceso a un artículo o registro específico.resource.Owner se puede utilizar para obtener el atributo de un recurso./res/*, /res/:id y métodos HTTP como GET, POST, , .En Casbin, un modelo de control de acceso se abstrae en un archivo CONF basado en el metamodelo PERM (Policy, Effect, Request, Matchers). Por lo tanto, cambiar o actualizar el mecanismo de autorización de un proyecto es tan simple como modificar una configuración. Puedes personalizar tu propio modelo de control de acceso combinando los modelos disponibles. Por ejemplo, puedes obtener roles RBAC y atributos ABAC juntos dentro de un mismo modelo y compartir un mismo conjunto de reglas de política.
El modelo más básico y sencillo de Casbin es ACL. El CONF del modelo ACL es:
# 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 ejemplo de política para el modelo ACL es:
p, alice, data1, read
p, bob, data2, write
Esto significa:
También soportamos el modo multilínea añadiendo '\' al final:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Además, si estás usando ABAC, puedes probar el operador in como se muestra a continuación en la edición golang de Casbin (jCasbin y Node-Casbin aún no son compatibles):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Pero DEBES asegurarte de que la longitud del array sea MAYOR que 1; de lo contrario, provocará un panic.
Para más operadores, puedes echar un vistazo a govaluate
Qué hace Apache Casbin:
{subject, object, action} o en una forma personalizada según la definas; se admiten tanto autorizaciones de permitir como de denegar.root o administrator. Un superusuario puede hacer cualquier cosa sin permisos explícitos.keyMatch puede mapear una clave de recurso /foo/bar al patrón /foo*.Qué no hace Apache Casbin:
username y password cuando un usuario inicia sesión)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
También puedes usar el editor en línea (https://casbin.apache.org/editor/) para escribir tu modelo y política de Casbin en tu navegador web. Proporciona funcionalidades como syntax highlighting y code completion, igual que un IDE para un lenguaje de programación.
https://casbin.apache.org/docs/tutorials
Crea un enforcer de Casbin con un archivo de modelo y un archivo de política:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Nota: también puedes inicializar un enforcer con la política en la base de datos en lugar de un archivo; consulta la sección Persistencia de políticas para más detalles.
Añade un hook de enforcement en tu código justo antes de que ocurra el acceso:
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
}
Además del archivo de política estático, Apache Casbin también proporciona una API para la gestión de permisos en tiempo de ejecución. Por ejemplo, puedes obtener todos los roles asignados a un usuario como se muestra a continuación:
roles, _ := e.GetImplicitRolesForUser(sub)
Consulta API de gestión de políticas para más usos.
Apache Casbin proporciona dos conjuntos de API para gestionar permisos:
También proporcionamos una interfaz de usuario basada en web para la gestión de modelos y 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 autorización para frameworks web: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Por favor, lee la guía de contribución.
Este proyecto existe gracias a todas las personas que contribuyen.
Este proyecto está licenciado bajo la licencia Apache 2.0.
Si tienes algún problema o solicitud de funcionalidad, por favor contáctanos. Los PR son bienvenidos.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| listo para producción | listo para producción | listo para producción | listo para producción |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| listo para producción | listo para producción | listo para producción | listo para producción |
PUTDELETE| Modelo | Archivo de modelo | Archivo de política |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL con superusuario | basic_model_with_root.conf | basic_policy.csv |
| ACL sin usuarios | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL sin recursos | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC con roles de recursos | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC con dominios/inquilinos | 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 |
| Prioridad | priority_model.conf | priority_policy.csv |