Поздравляем, наш сайт Role Demo почти готов. Давайте кратко обговорим то, каким образом вы обычно будете использовать его, если планируете создать свой собственный вебсайт на его основе.
Первым делом вам необходимо создать все необходимые роли и привилегии через написанный нами удобный пользовательский интерфейс. Присвойте роль (или несколько ролей) каждому пользователю сайта.
Затем измените файл конфигурации module.config.php в модуле и добавьте два ключа:
rbac_manager
, который будет содержать настройки для RbacManager
(в частности,
конфигурацию менеджера(-ов));Пример этого ключа представлен ниже:
// Этот ключ хранит конфигурацию для менеджера RBAC.
'rbac_manager' => [
'assertions' => [Service\RbacAssertionManager::class],
],
access_filter
, который будет хранить правила доступа для страниц вашего вебсайта. Как правило, он выглядит так:'access_filter' => [
'options' => [
'mode' => 'restrictive'
],
'controllers' => [
Controller\IndexController::class => [
// Разрешить всем доступ к действиям "index" и "about"
['actions' => ['index', 'about'], 'allow' => '*'],
// Разрешить авторизованным пользователям доступ к действию "settings"
['actions' => ['settings'], 'allow' => '@']
],
]
],
Символы *
и @
в подключах allow
являются не единственными опциями. Ниже показано,
как могут выглядеть подключи allow
. Так, мы разрешаем доступ к странице:
*
);@
);личности
, если мы поставим (@identity
)привилегией
, если мы поставим знак плюса и имя привилегии (+permission
).Если ваш вебсайт содержит динамические утверждения, расширьте метод assert()
существующего
класса RbacAssertionManager
(или напишите и зарегистрируйте свой собственный менеджер утверждений):
public function assert(Rbac $rbac, $permission, $params)
{
$currentUser = $this->entityManager->getRepository(User::class)
->findOneByEmail($this->authService->getIdentity());
if ($permission=='post.own.edit' && $params['post']->getUser()->getId()==$currentUser->getId())
return true;
if ($permission=='post.own.publish' && $params['post']->getUser()->getId()==$currentUser->getId())
return true;
return false;
}
Если вы хотите проверить привилегии в действии контроллера, можно использовать плагин контроллера Access
следующим образом:
if (!$this->access('profile.own.view', ['user'=>$user])) {
return $this->redirect()->toRoute('not-authorized');
}
Если вы хотите проверить привилегии в шаблоне представления, можете использовать помощник представления Access
:
if ($this->access('profile.own.view', ['user'=>$user))) {
// что-то делаем...
}
Вот и все! Несложно, не правда ли?