Я следил за учебным пособием и всем руководством по авторизации CakePHP, и я не могу вызвать мой метод isAuthorized(). Мое понимание (поправьте меня, если я ошибаюсь, что невероятно вероятно) заключается в делегировании авторизации конкретным контроллерам путем выполнения 'authorize'->['Controller']
в AppController.php
, когда вызывается метод в UsersController, в этом случае «добавить», UsersController запускает метод isAuthorized()
Я определил. Я проверял, работает ли этот метод вообще, выводя сообщение об ошибке flash-> прямо при вызове isAuthorized()
, но ничего не происходит. Если я явно вызову isAuthorized($hardcodeduser)
в моем методе beforeFilter()
, он будет работать, но только если я жестко запрограммирую пользователя.
Предполагается, что этот метод работает следующим образом: если зарегистрированный пользователь запрашивает добавление/создание нового пользователя, система проверяет, есть ли у пользователя разрешения уровня администратора/сотрудника (это просто значение 0 или 1 в базе данных) и если у пользователя нет разрешения, он перенаправляется на главный экран с сообщением об ошибке, в котором говорится: «У вас нет прав для доступа к этой функции».
Будем очень признательны за любую помощь, предложения или другие ссылки!
class AppController extends Controller {
public $components = ['Flash', 'Auth', 'Session'];
public function initialize() {
$this->loadComponent('Flash');
$this->loadComponent('Auth', [
'authorize' => ['Controller'],
'loginRedirect' => [
'controller' => 'Articles',
'action' => 'index'
],
'logoutRedirect' => [
'controller' => 'Pages',
'action' => 'display',
'home'
]
]);
}
public function beforeFilter(Event $event) {
$this->Auth->authorize = 'Controller';
}
public function isAuthorized($user) {
if(isset($user['is_staff']))
return true;
return false;
}
}
class UsersController extends AppController {
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
$this->Auth->allow(['logout']);
}
public function isAuthorized($user) {
$this->Flash->error(__('Test Message PLEASE WORK'));
if($this->request->action === 'add') {
$isStaff = $user['is_staff'];
if($isStaff == 0) {
$this->redirect($this->Auth->redirectUrl());
$this->Flash->error(__('Not authorized to access this function'));
return false;
}
}
return parent ::isAuthorized($user);
}
}