1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/casbin-pycasbin

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Casbin

GitHub Action

Coverage Status

Version

PyPI - Wheel

Pyversions

Download

Gitter

💖 Ищете open-source решение для управления идентификацией и доступом, такое как Okta, Auth0, Keycloak? Узнайте больше о Casdoor!

casdoor

Новости: асинхронная версия PyCasbin доступна по адресу: https://pypi.org/project/asynccasbin/.

Новости: всё ещё беспокоитесь о том, как написать правильную политику Casbin? На помощь придёт онлайн-редактор Casbin! Попробуйте его по адресу: http://casbin.org/editor/.

Casbin — это мощная и эффективная библиотека контроля доступа с открытым исходным кодом для проектов Python. Она поддерживает авторизацию на основе различных моделей контроля доступа.

Все языки, поддерживаемые Casbin:

Языки
Golang
Java
Node.js
PHP

Casbin, jCasbin, node-Casbin, PHP-Casbin.

Языки
Python
.NET
C++
Rust

PyCasbin, Casbin.NET, Casbin-CPP, Casbin-RS.

Содержание

  • Поддерживаемые модели
  • Как это работает?
  • Функции
  • Установка
  • Документация
  • Онлайн-редактор
  • Учебники
  • Начало работы
  • Управление политиками
  • Сохранение политик
  • Менеджер ролей
  • Бенчмарки
  • Примеры
  • Middlewares
  • Наши пользователи

Поддерживаемые модели

  1. ACL (Access Control List)
  2. ACL с суперпользователем
  3. ACL без пользователей
  4. ACL без ресурсов
  5. RBAC (Role-Based Access Control)
  6. RBAC с ресурсными ролями Ресурсы могут иметь роли (или группы) одновременно.
  7. Управление доступом на основе ролей (RBAC) с доменами/арендаторами: пользователи могут иметь разные наборы ролей для разных доменов/арендаторов.
  8. Управление доступом на основе атрибутов (ABAC): синтаксический сахар, такой как «resource.Owner», можно использовать для получения атрибута ресурса.
  9. RESTful: поддерживает пути типа «/res/*», «/res/:id» и HTTP-методы типа GET, POST, PUT, DELETE.
  10. Запрет переопределения: поддерживаются разрешения на разрешение и запрет, запрет переопределяет разрешение.
  11. Приоритет: правила политики можно расставить по приоритету, как правила брандмауэра.

Как это работает?

В 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

Это означает:

  • Алиса может читать data1.
  • Боб может писать data2.

Мы также поддерживаем многострочный режим, добавляя '\' в конце:

# Сопоставители
[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:

  1. Применяет политику в классической форме {субъект, объект, действие} или в настраиваемой форме, которую вы определили, поддерживаются как разрешения, так и запреты.
  2. Управляет хранением модели контроля доступа и её политики.
  3. Управляет сопоставлениями ролей пользователей и сопоставлениями ролей (иерархия ролей в RBAC).
  4. Поддерживает встроенного суперпользователя, такого как root или administrator. Суперпользователь может делать всё без явных разрешений.
  5. Предоставляет несколько встроенных операторов для поддержки сопоставления правил. Например, keyMatch может сопоставить ключ ресурса /foo/bar с шаблоном /foo*.

Чего Casbin не делает:

  1. Аутентификацию (проверку имени пользователя и пароля при входе пользователя в систему).
  2. Управление списком пользователей или ролей. Я считаю, что самому проекту удобнее управлять этими сущностями. Пользователи обычно имеют свои пароли, а Casbin не предназначен для хранения паролей. Однако Casbin хранит сопоставление пользователь-роль для сценария RBAC.

Установка

pip install casbin

Документация

https://casbin.org/docs/overview

Онлайн-редактор

Вы также можете использовать онлайн-редактор (http://casbin.org/editor/), чтобы написать свою модель и политику Casbin в веб-браузере. Он предоставляет такие функции, как подсветка синтаксиса и автозаполнение, как IDE для языка программирования.

Учебники

https://casbin.org/docs/tutorials

Начало работы

  1. Создайте Casbin-контролёр с файлом модели и файлом политики:
import casbin
e = casbin.Enforcer("path/to/model.conf", "path/to/policy.csv")

Примечание: вы также можете инициализировать контролёр с политикой в БД вместо файла, см. раздел Постоянство политики для подробностей.

  1. Добавьте принудительный механизм в свой код. Перед доступом:
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

Примеры

Модель Файл модели Файл политики
ACL basic_model.conf (https://github.com/casbin/casbin/blob/master/examples/basic_model.conf) basic_policy.csv (https://github.com/casbin/casbin/blob/master/examples/basic_policy.csv)
ACL с суперпользователем basic_model_with_root.conf (https://github.com/casbin/casbin/blob/master/examples/basic_with_root_model.conf) basic_policy.csv (https://github.com/casbin/casbin/blob/master/examples/basic_policy.csv)
ACL без пользователей basic_model_without_users.conf (https://github.com/casbin/casbin/blob/master/examples/basic_without_users_model.conf) basic_policy_without_users.csv (https://github.com/casbin/casbin/blob/master/examples/basic_without_users_policy.csv)
ACL без ресурсов basic_model_without_resources.conf (https://github.com/casbin/casbin/blob/master/examples/basic_without_resources_model.conf) basic_policy_without_resources.csv (https://github.com/casbin/casbin/blob/master/examples/basic_without_resources_policy.csv)
RBAC rbac_model.conf (https://github.com/casbin/casbin/blob/master/examples/rbac_model.conf) rbac_policy.csv (https://github.com/casbin/casbin/blob/master/examples/rbac_policy.csv)
RBAC с ролями ресурсов rbac_model_with_resource_roles.conf (https://github.com/casbin/casbin/blob/master/examples/rbac_with_resource_roles_model.conf) rbac_policy_with_resource_roles.csv (https://github.com/casbin/casbin/blob/master/examples/rbac_with_resource_roles_policy.csv)
RBAC с доменами/арендаторами rbac_model_with_domains.conf (https://github.com/casbin/casbin/blob/master/examples/rbac_with_domains_model.conf) rbac_policy_with_domains.csv (https://github.com/casbin/casbin/blob/master/examples/rbac_with_domains_policy.csv)
ABAC abac_model.conf (https://github.com/casbin/casbin/blob/master/examples/abac_model.conf) N/A
RESTful keymatch_model.conf (https://github.com/casbin/casbin/blob/master/examples/keymatch_model.conf) keymatch_policy.csv (https://github.com/casbin/casbin/blob/master/examples/keymatch_policy.csv)
Запрет-переопределение rbac_model_with_deny.conf (https://github.com/casbin/casbin/blob/master/examples/rbac_with_deny_model.conf) rbac_policy_with_deny.csv (https://github.com/casbin/casbin/blob/master/examples/rbac_with_deny_policy.csv)
Приоритет ## Middlewares

Authz middlewares для веб-фреймворков: https://casbin.org/docs/middlewares

Наши пользователи

https://casbin.org/docs/adopters

Участники

Этот проект существует благодаря всем людям, которые вносят свой вклад.

Спонсоры

Спасибо всем нашим спонсорам! 🙏 [Станьте спонсором]

Покровители

Поддержите этот проект, став покровителем. Ваш логотип будет отображаться здесь с ссылкой на ваш веб-сайт. [Станьте покровителем]

Лицензия

Этот проект лицензирован по лицензии Apache 2.0.

Контакты

Если у вас есть какие-либо вопросы или пожелания, пожалуйста, свяжитесь с нами. PR приветствуется.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/casbin-pycasbin.git
git@api.gitlife.ru:oschina-mirror/casbin-pycasbin.git
oschina-mirror
casbin-pycasbin
casbin-pycasbin
master