
Casbin4D - это кросс -платформная (FiremonKey) для Delphi/Pascal из популярной библиотеки авторизации Casbin. Он обеспечивает поддержку для обеспечения соблюдения авторизации на основе различных моделей контроля доступа.
Вас сердечно приглашают поделиться, развеваться, просмотреть и улучшить эту библиотеку. Пожалуйста, не стесняйтесь комментировать и предлагать предложения. Если вы хотите внести свой вклад, сначала проверьте страницу вики для разработчиков
| Касбин | Jcasbin | Узел-касбин | PHP-касбин |
| готовый к производству | готовый к производству | готовый к производству | готовый к производству |
![]() | |||
|---|---|---|---|
| Пикасбин | Casbin4d | Casbin-Net | Casbin-Rs |
| готовый к производству | экспериментальный | готовый к производству | готовый к производству |
write-article , read-log . Он не контролирует доступ к конкретной статье или журналу.resource.Owner может использоваться для получения атрибута для ресурса./res/* , /res/:id и HTTP, такие как GET , POST , PUT , DELETE .В Casbin модель контроля доступа абстрагируется в файл CONF, основанный на пермской метамодели (политика, эффект, запрос, совпадения) . Таким образом, переключение или обновление механизма авторизации для проекта так же просто, как и изменение конфигурации. Вы можете настроить свою собственную модель управления доступом, объединив доступные модели. Например, вы можете собрать роли 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
Вышеуказанная конфигурация следует за языком GO.
Casbin4d понимает это, но вы также можете использовать типичный стиль Delphi/Pascal:
...
[matchers]
m = r.sub = p.sub and r.obj = p.sub and r.act = p.act
Пример политики для модели ACL - это как:
p, alice, data1, read
p, bob, data2, write
Для Casbin это означает, что:
Затем в вашем приложении создается создание нового объекта Casbin (интерфейс) и передайте необходимые файлы:
var
casbin: ICasbin;
begin
casbin:=TCasbin.Create ('model.conf', 'policies.csv');
...
end
и, наконец, проверить (исполнение) утверждение:
...
if casbin.enforce(['alice,data1,read']) then
// Alice is super happy as she can read data1
else
// Alice is sad
...
Что делает Касбин:
{subject, object, action} или настраиваемой форме, как вы определяете, как разрешенные, так и отказ от разрешения поддерживаются.root или administrator . Суперпользователь может сделать что -нибудь без разрешений на объяснение.keyMatch может составить карту ключа ресурса /foo/bar с шаблоном /foo*ЧТО КАСБИН не делает:
username и password , когда пользователь входит в систему)Casbin4D поставляется в пакете (в настоящее время для Delphi 10.3 Rio), и вы можете установить его в IDE. Тем не менее, нет визуальных компонентов, что означает, что вы можете использовать единицы независимо от пакетов. Просто импортируйте подразделения в свой проект (при условии, что вы не против их числа)
Пожалуйста, посмотрите на страницы вики
Вы также можете использовать онлайн -редактор (http://casbin.org/editor/), чтобы написать свою модель и политику Casbin в вашем веб -браузере. Он предоставляет функциональность, такие как syntax highlighting и code completion , как и IDE для языка программирования.
Вы также можете использовать основную демонстрацию для проверки сценариев и утверждений. Смотрите демо
Смотрите папку Demos. Папка «Примеры» содержит пример конфигурации и файлов политики из оригинальной реализации GO
Основная демонстрация находится под демонстрациями/главной папкой. Вы также можете найти исполняемый файл в этой папке, чтобы загрузить его и попробовать Casbin4d

Пожалуйста, смотрите документацию
CASBIN4D предоставляет одну точку доступа для управления разрешениями через iPolicyManager. Если вы знакомы с другими реализациями, вы заметите, что у них есть два набора API (API управления и RBAC API). Эта реализация объединяет их обоих в рамках менеджера политики
В Casbin4D хранилище политики абстрагировано через концепцию адаптера. Потребитель Casbin4D может свободно реализовать управление хранилищем политики, поскольку они считают их потребностями. Для удобства, Casbin4D предоставляет две адаптеры: один для текстовых файлов (.csv) и один адаптер памяти. Приглашаем (и приглашается) внести любые новые адаптеры с более широким использованием. Пожалуйста, дайте нам знать
Casbin4D разработан с учетом многопоточного. Текущая реализация достигает этого на уровне исполнителя
В папке тестов, который проверяет политическое обеспечение, расположен контрольный проект.
Проект был выполнен в следующей машине/установке:
* Dell XPS 15 9560: Intel(R) Core(TM) i7-7700HQ CPU @2.80GHz, 2801MHz, 4 Core(s), 8 Logical Processor(s)
* Windows: Windows 10 Pro 64-bit, 10.0.16299 Build 16299
Результаты показаны в следующей таблице. Временные накладные расходы рассчитываются по операции (OP), которая представляет собой один вызов TCasbin.enforce[..]
| Тестовый случай | Размер | Время наверху | Память над головой |
|---|---|---|---|
| Сырое сияние | 2 правила (2 пользователя) | 0,000090 с/соч | 0 кб |
| Базовая модель | 2 правила (2 пользователя) | 0,000466 сек/соч | 432 б |
| RBAC | 5 правил (2 пользователя, 1 роль) | 0,000872 сек/соч | 352 б |
| RBAC (маленький) | 1100 правил (1000 пользователей, 100 ролей) | 0,238945 с/соч | 1,49 МБ |
| RBAC (средний) | 11 000 правил (10 000 пользователей, 1000 ролей) | 9.745707 СЕД/ОП | 15,7 МБ |
| RBAC (с ролями ресурсов) | 6 правил (2 пользователя, 2 роли) | 0,000658 с/соч | 352 б |
| RBAC (с доменами/арендаторами) | 6 правил (2 пользователя, 1 роль, 2 домена) | 0,000670 сек/соч | 352 б |
| RBAC (с отрицанием) | 6 правил (2 пользователя, 1 роль) | 0,001260 с/соч | 380 б |
| Абак | 0 Правила (0 пользователей) | 0,000181 сек/соч | 120 б |
| Keymatch | 2 правила (2 пользователя) | 0,000782 с/соч | 352 б |
| Приоритет | 9 правил (2 пользователя, 2 роли) | 0,001124 с/соч | 380 б |
| Модель | Модельный файл | Файл политики |
|---|---|---|
| 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_model.conf | N/a |
| Спокойный | keymatch_model.conf | keymatch_policy.csv |
| Отрицание переверра | rbac_model_with_deny.conf | rbac_policy_with_deny.csv |
| Приоритет | Приоритет_model.conf | Приоритет_полици |
Подавляющее большинство тестов первоначальной реализации в GO было импортировано в Delphi. Пожалуйста, смотрите тесты
Вы можете проверить покрытие кода здесь для актуального статуса. Вы можете улучшить тесты и покрытие
Этот проект лицензирован по лицензии Apache 2.0.
Если у вас есть какие -либо проблемы или запросы на функции, пожалуйста, свяжитесь с нами. PR приветствуется