Casbin
💖 Ищете open-source решение для управления идентификацией и доступом, такое как Okta, Auth0, Keycloak? Узнайте больше о Casdoor!
Новости: асинхронная версия PyCasbin доступна по адресу: https://pypi.org/project/asynccasbin/.
Новости: всё ещё беспокоитесь о том, как написать правильную политику Casbin? На помощь придёт онлайн-редактор Casbin! Попробуйте его по адресу: http://casbin.org/editor/.
Casbin — это мощная и эффективная библиотека контроля доступа с открытым исходным кодом для проектов Python. Она поддерживает авторизацию на основе различных моделей контроля доступа.
Языки |
---|
Golang |
Java |
Node.js |
PHP |
Casbin, jCasbin, node-Casbin, PHP-Casbin.
Языки |
---|
Python |
.NET |
C++ |
Rust |
PyCasbin, Casbin.NET, Casbin-CPP, Casbin-RS.
В Casbin модель контроля доступа абстрагируется в файл CONF на основе метамодели PERM (Политика, Эффект, Запрос, Сопоставители). Таким образом, переключение или обновление механизма авторизации для проекта — это так же просто, как изменить конфигурацию. Вы можете настроить собственную модель контроля доступа, комбинируя доступные модели. Например, вы можете объединить роли RBAC и атрибуты ABAC в одной модели и использовать один набор правил политики.
Самая базовая и простая модель в Casbin — это ACL. Модель CONF для ACL выглядит следующим образом:
# Определение запроса
[request_definition]
r = sub, obj, act
# Определение политики
[policy_definition]
p = sub, obj, act
# Эффект политики
[policy_effect]
e = some(where (p.eft == allow))
# Сопоставители
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
Пример политики для модели ACL выглядит так:
p, alice, data1, read
p, bob, data2, write
Это означает:
Мы также поддерживаем многострочный режим, добавляя '\' в конце:
# Сопоставители
[matchers]
m = r.sub == p.sub && r.obj == p.obj \
&& r.act == p.act
Кроме того, если вы используете ABAC, вы можете попробовать оператор in
в версии Casbin на языке golang (jCasbin и Node-Casbin пока не поддерживаются):
# Сопоставители
[matchers]
m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3')
Но вы ДОЛЖНЫ убедиться, что длина массива БОЛЬШЕ 1, иначе это вызовет панику.
Дополнительные операторы можно найти в govaluate.
Что делает Casbin:
Чего Casbin не делает:
pip install casbin
https://casbin.org/docs/overview
Вы также можете использовать онлайн-редактор (http://casbin.org/editor/), чтобы написать свою модель и политику Casbin в веб-браузере. Он предоставляет такие функции, как подсветка синтаксиса и автозаполнение, как IDE для языка программирования.
https://casbin.org/docs/tutorials
import casbin
e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")
Примечание: вы также можете инициализировать контролёр с политикой в БД вместо файла, см. раздел Постоянство политики для подробностей.
sub = "alice" # пользователь, который хочет получить доступ к ресурсу.
obj = "data1" # ресурс, к которому будет получен доступ.
act = "read" # операция, которую пользователь выполняет над ресурсом.
if e.enforce(sub, obj, act):
# разрешить Алисе читать data1
pass
else:
# отклонить запрос, показать ошибку
pass
Кроме статического файла политики, Casbin также предоставляет API для управления разрешениями во время выполнения. Например, вы можете получить все роли, назначенные пользователю:
roles = e.get_roles_for_user("alice")
Подробнее см. в разделе «Управление политиками».
Управление политиками
Casbin предоставляет два набора API для управления разрешениями:
Мы также предоставляем веб-интерфейс для управления моделью и политикой:
Редактор модели | Редактор политики |
---|---|
![]() |
![]() |
Постоянство политик https://casbin.org/docs/adapters
Менеджер ролей https://casbin.org/docs/role-managers
Бенчмарки https://casbin.org/docs/benchmark
Примеры
Authz middlewares для веб-фреймворков: https://casbin.org/docs/middlewares
https://casbin.org/docs/adopters
Этот проект существует благодаря всем людям, которые вносят свой вклад.
Спасибо всем нашим спонсорам! 🙏 [Станьте спонсором]
Поддержите этот проект, став покровителем. Ваш логотип будет отображаться здесь с ссылкой на ваш веб-сайт. [Станьте покровителем]
Этот проект лицензирован по лицензии Apache 2.0.
Если у вас есть какие-либо вопросы или пожелания, пожалуйста, свяжитесь с нами. PR приветствуется.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )