
Библиотека авторизации, обеспечивающая модели управления доступом ACL, RBAC, ABAC и пользовательские модели с RESTful-сопоставлением и API управления политиками для приложений и сервисов.
Новости: всё ещё переживаете, как написать правильную политику Apache Casbin? Apache Casbin online editor спешит на помощь! Попробуйте: https://casbin.apache.org/editor/

Apache Casbin — это мощная и эффективная библиотека с открытым исходным кодом для контроля доступа в проектах на Golang. Она обеспечивает поддержку принудительного применения авторизации на основе различных моделей контроля доступа.
write-article, read-log. При этом не контролируется доступ к конкретной статье или логу.resource.Owner, позволяет получить атрибут ресурса./res/*, /res/:id и HTTP-методы GET, POST, PUT, .В Casbin модель контроля доступа абстрагируется в CONF-файл на основе метамодели PERM (Policy, Effect, Request, Matchers). Поэтому переключение или обновление механизма авторизации для проекта так же просто, как изменение конфигурации. Вы можете настроить собственную модель контроля доступа, комбинируя доступные модели. Например, можно объединить роли RBAC и атрибуты ABAC в одной модели и использовать один общий набор правил политики.
Самая базовая и простая модель в Casbin — ACL. CONF-модель 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
Пример политики для модели ACL:
p, alice, data1, read
p, bob, data2, write
Это означает:
Мы также поддерживаем многострочный режим, добавляя '\' в конец:
# Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Более того, если вы используете ABAC, в golang-редакции Casbin можно использовать оператор in следующим образом (jCasbin и Node-Casbin пока не поддерживаются):
# Matchers
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Но вы ДОЛЖНЫ убедиться, что длина массива БОЛЬШЕ 1, иначе произойдёт паника.
Дополнительные операторы можно посмотреть в govaluate
Что делает Apache Casbin:
{subject, object, action} или в настраиваемой форме, как вы определили; поддерживаются и разрешающие, и запрещающие авторизации.root или administrator. Суперпользователь может делать что угодно без явных разрешений.keyMatch может сопоставить ключ ресурса /foo/bar с шаблоном /foo*.Чего Apache Casbin НЕ делает:
username и password при входе пользователя)go get github.com/casbin/casbin/v3
https://casbin.apache.org/docs/overview
Вы также можете использовать онлайн-редактор (https://casbin.apache.org/editor/), чтобы писать модель и политику Casbin прямо в веб-браузере. Он предоставляет такие возможности, как подсветка синтаксиса и автодополнение, совсем как IDE для языка программирования.
https://casbin.apache.org/docs/tutorials
Создайте новый enforcer Casbin с файлом модели и файлом политики:
e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
Примечание: вы также можете инициализировать enforcer с политикой в БД вместо файла, подробнее см. раздел Хранение политик.
Добавьте перехватчик принудительного применения в ваш код непосредственно перед обращением к ресурсу:
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
}
Помимо статического файла политики, Apache Casbin также предоставляет API для управления разрешениями во время выполнения. Например, можно получить все роли, назначенные пользователю, так:
roles, _ := e.GetImplicitRolesForUser(sub)
Дополнительные варианты использования см. в разделе API управления политиками.
Apache Casbin предоставляет два набора API для управления разрешениями:
Мы также предоставляем веб-интерфейс для управления моделью и политиками:


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
Authz-промежуточные слои для веб-фреймворков: https://casbin.apache.org/docs/middlewares
https://casbin.apache.org/docs/adopters
Пожалуйста, прочитайте руководство по внесению вклада.
Этот проект существует благодаря всем людям, которые вносят вклад.
Этот проект распространяется под лицензией Apache 2.0.
Если у вас есть вопросы или запросы функций, пожалуйста, свяжитесь с нами. PR приветствуется.
![]() | ![]() | ![]() | ![]() |
|---|
| Casbin | jCasbin | node-Casbin | PHP-Casbin |
| готов к продакшену | готов к продакшену | готов к продакшену | готов к продакшену |
![]() | ![]() | ![]() | ![]() |
|---|
| PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
| готов к продакшену | готов к продакшену | готов к продакшену | готов к продакшену |
DELETE| Модель | Файл модели | Файл политики |
|---|
| ACL | basic_model.conf | basic_policy.csv |
| ACL с суперпользователем | basic_model_with_root.conf | basic_policy.csv |
| ACL без пользователей | basic_model_without_users.conf | basic_policy_without_users.csv |
| ACL без ресурсов | basic_model_without_resources.conf | basic_policy_without_resources.csv |
| RBAC | rbac_model.conf | rbac_policy.csv |
| RBAC с ролями ресурсов | rbac_model_with_resource_roles.conf | rbac_policy_with_resource_roles.csv |
| RBAC с доменами/тенантами | 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 |
| Приоритет | priority_model.conf | priority_policy.csv |