PHP-Casbin — это легкая платформа контроля доступа с открытым исходным кодом (https://github.com/php-casbin/php-casbin), встроенная в PHP, и в настоящее время она является открытым исходным кодом на GitHub. PHP-Casbin использует метамодельный подход к дизайну, который поддерживает множество классических схем управления доступом, таких как RBAC на основе ролей, управление доступом ABAC на основе атрибутов и многое другое.
функции
- Поддержка формата пользовательского запроса, формат запроса по умолчанию: {subject, object, action};
- Имеют две основные концепции модели и стратегии контроля доступа;
- Поддержка многоуровневого наследования роли в RBAC, а не только основной орган может иметь роли, но ресурсы также могут иметь роли;
- Поддержка суперпользователей, таких как root или Administrator, суперпользователи могут получить доступ к произвольным ресурсам, не привязавшись к политикам авторизации;
- Поддержка множества встроенных операторов, таких как keyMatch, для облегчения управления ресурсами на основе пути, например /foo/bar, можно сопоставить с /foo*
Что PHP-Casbin не делает
- Аутентификация подлинности (то есть проверка имени пользователя и пароля пользователя), PHP-Casbin отвечает только за контроль доступа. Должны быть другие специализированные компоненты, ответственные за аутентификацию подлинности, а затем контроль доступа с помощью PHP-Casbin, эти два являются взаимно совместимыми;
- Управление списками пользователей или списками ролей. PHP-Casbin считает, что более подходящим для самого проекта является управление пользователями и списками ролей. PHP-Casbin предполагает, что пользователи, роли и ресурсы, которые отображаются во всех политиках и запросах, являются законными и действительными.
устанавливать
composer require casbin/casbin
Пример HelloWorld
- Инициализировать исполнитель, передавая два параметра: путь к файлу модели и путь к файлу политики;
$e = new Enforcer(__DIR__ . '/examples/modelandpolicy/basic_model.conf', __DIR__ . "/examples/modelandpolicy/basic_policy.csv");
- В месте, где должен быть доступ к вашему коду, добавьте следующие крючки;
$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 ($e->enforce($sub, $obj, $act) === true) {
// permit alice to read data1x
} else {
// deny the request, show an error
}
- Используйте API управления для управления разрешениями, такими как получение принадлежащей пользователю роли;
$roles = $e->getRoles('alice');
Прогресс сообщества
PHP-Casbin в настоящее время активно подталкивает к сообществу, и в настоящее время плагины поддерживают плагин с веб-фреймворками, такими как Laravel, и в будущем будут распространяться на большее количество веб-фреймворков и сообществ. В Casbin уже есть версии Golang, Java, PHP и Node.js. Разработчики, имеющие межязыковые требования, могут использовать только инфраструктуру Casbin для реализации задач управления правами для проектов на нескольких языках.
соглашение
PHP-Casbin выпускается под открытым исходным кодом Apache 2.0.
Связаться с автором
Если у вас есть какие-либо вопросы, отправьте свои вопросы на https://github.com/php-casbin/php-casbin/issues
Или присоединитесь к группе QQ: 546057381 (группа обсуждения контроля доступа Casbin)
Комментарии (3)
techleeone Автор
16.11.2018 05:46-1I don't understand Russian, I use Google to translate it. If you can, need your help
ErickSkrauch
Великолепная статья.Помимо перевода в духе "она — со мной, углепластик", тема не раскрыта примерно никак. Чуть больше года назад я уже присматривался к этой библиотеке и тогда меня озадачило как раз таки то, что синтаксис описания правил доступа несколько неочевиден. Родные руководства мало выручали и в итоге я от неё отказался. И вот, думаю, статья, где всё будет разложено по полочкам с примерами на базе реальных задач. Но вместо этого мы просто подключается файл с ролями и правилами и вуаля — RBAC настроен!techleeone Автор
I don't understand Russian, I use Google to translate it. If you can, need your help