Итак, у меня есть 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 может быть исправлена, я могу применить это для всех других контроллеров.