A free and open-source book on ZF3 for beginners


17.15. Использование модуля User

Поздравляем, наш сайт Role Demo почти готов. Давайте кратко обговорим то, каким образом вы обычно будете использовать его, если планируете создать свой собственный вебсайт на его основе.

Первым делом вам необходимо создать все необходимые роли и привилегии через написанный нами удобный пользовательский интерфейс. Присвойте роль (или несколько ролей) каждому пользователю сайта.

Затем измените файл конфигурации module.config.php в модуле и добавьте два ключа:

Пример этого ключа представлен ниже:

// Этот ключ хранит конфигурацию для менеджера RBAC.
'rbac_manager' => [
    'assertions' => [Service\RbacAssertionManager::class],
],
'access_filter' => [
    'options' => [
        'mode' => 'restrictive'
    ],
    'controllers' => [
        Controller\IndexController::class => [
            // Разрешить всем доступ к действиям "index" и "about"
            ['actions' => ['index', 'about'], 'allow' => '*'],
            // Разрешить авторизованным пользователям доступ к действию "settings"
            ['actions' => ['settings'], 'allow' => '@']
        ],
    ]
],

Символы * и @ в подключах allow являются не единственными опциями. Ниже показано, как могут выглядеть подключи allow. Так, мы разрешаем доступ к странице:

Если ваш вебсайт содержит динамические утверждения, расширьте метод 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))) {
   // что-то делаем...
}

Вот и все! Несложно, не правда ли?


Top