2017-01-11 2 views
0

Итак, у меня есть 4 разных ролей, которые в таблице «Пользователи» являются внешними ключами под атрибутом «role_id». Роль_ид Admin равен 1. Я пытаюсь заблокировать всех пользователей, но администратор получает доступ к страницам администратора, таким как индексная страница пользователей.CakePHP 3 - Авторизация с пронумерованными ролями

Мой AppController выглядит следующим образом:

class AppController extends Controller 
{ 

public function initialize() 
    { 
     parent::initialize(); 

     $this->loadComponent('RequestHandler'); 
     $this->loadComponent('Flash'); 
     $this->loadComponent('Auth',[ 
      'authorize' => 'Controller', 
     ]); 

     $this->Auth->allow(['display', 'index', 'view', 'add']); 
    } 

public function isAuthorized($user) 
    { 
     // Default deny 
     return false; 
    } 
} 

Тогда в UsersController:

class UsersController extends AppController 
{ 

public function initialize() 
    { 
     parent::initialize(); 
     // Add logout to the allowed actions list. 
     $this->Auth->deny(['index', 'add', 'view']); 
     $this->Auth->allow(['register', 'forgetpw', 'resetpw', 'logout']); 
    } 

public function isAuthorized($user) 
    {  
     if (in_array($this->request->action,['view', 'edit', 'index', 'add'])) { 
      return (bool)($user['role_id'] === '1'); 
     } 

     return parent::isAuthorized($user); 
    } 
} 

Каждый пользователь может получить доступ представления для 'регистр', 'forgetpw', 'resetpw', как указано в разрешается в функции инициализации UsersController. В настоящий момент ни один пользователь не может получить доступ к «индексам», «добавить», «просмотреть» или «редактировать», которые должны быть доступны администратору.

Я думаю, что если авторизация для страниц UserController может быть исправлена, я могу применить это для всех других контроллеров.

ответ

0

Хорошо, я думаю, что я решил проблему.

return (bool)($user['role_id'] === '1'); 

должен был

return (bool)($user['role_id'] === 1); 
Смежные вопросы