PHP-Casbin — это легкая платформа контроля доступа с открытым исходным кодом (https://github.com/php-casbin/php-casbin), встроенная в PHP, и в настоящее время она является открытым исходным кодом на GitHub. PHP-Casbin использует метамодельный подход к дизайну, который поддерживает множество классических схем управления доступом, таких как RBAC на основе ролей, управление доступом ABAC на основе атрибутов и многое другое.


функции


  1. Поддержка формата пользовательского запроса, формат запроса по умолчанию: {subject, object, action};
  2. Имеют две основные концепции модели и стратегии контроля доступа;
  3. Поддержка многоуровневого наследования роли в RBAC, а не только основной орган может иметь роли, но ресурсы также могут иметь роли;
  4. Поддержка суперпользователей, таких как root или Administrator, суперпользователи могут получить доступ к произвольным ресурсам, не привязавшись к политикам авторизации;
  5. Поддержка множества встроенных операторов, таких как keyMatch, для облегчения управления ресурсами на основе пути, например /foo/bar, можно сопоставить с /foo*

Что PHP-Casbin не делает


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

устанавливать


composer require casbin/casbin

Пример HelloWorld


  1. Инициализировать исполнитель, передавая два параметра: путь к файлу модели и путь к файлу политики;

$e = new Enforcer(__DIR__ . '/examples/modelandpolicy/basic_model.conf', __DIR__ . "/examples/modelandpolicy/basic_policy.csv");

  1. В месте, где должен быть доступ к вашему коду, добавьте следующие крючки;

$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
}

  1. Используйте API управления для управления разрешениями, такими как получение принадлежащей пользователю роли;

$roles = $e->getRoles('alice');

Прогресс сообщества


PHP-Casbin в настоящее время активно подталкивает к сообществу, и в настоящее время плагины поддерживают плагин с веб-фреймворками, такими как Laravel, и в будущем будут распространяться на большее количество веб-фреймворков и сообществ. В Casbin уже есть версии Golang, Java, PHP и Node.js. Разработчики, имеющие межязыковые требования, могут использовать только инфраструктуру Casbin для реализации задач управления правами для проектов на нескольких языках.


- Casbin (Go)



соглашение


PHP-Casbin выпускается под открытым исходным кодом Apache 2.0.


Связаться с автором


Если у вас есть какие-либо вопросы, отправьте свои вопросы на https://github.com/php-casbin/php-casbin/issues


Или присоединитесь к группе QQ: 546057381 (группа обсуждения контроля доступа Casbin)

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


  1. ErickSkrauch
    16.11.2018 01:08
    +1

    Великолепная статья. Помимо перевода в духе "она — со мной, углепластик", тема не раскрыта примерно никак. Чуть больше года назад я уже присматривался к этой библиотеке и тогда меня озадачило как раз таки то, что синтаксис описания правил доступа несколько неочевиден. Родные руководства мало выручали и в итоге я от неё отказался. И вот, думаю, статья, где всё будет разложено по полочкам с примерами на базе реальных задач. Но вместо этого мы просто подключается файл с ролями и правилами и вуаля — RBAC настроен!


    1. techleeone Автор
      16.11.2018 05:36
      -1

      I don't understand Russian, I use Google to translate it. If you can, need your help


  1. techleeone Автор
    16.11.2018 05:46
    -1

    I don't understand Russian, I use Google to translate it. If you can, need your help