Я пытаюсь deny
выполнить некоторые действия для пользователей без прав администратора в моих контроллерах.Таким образом, в контроллерах я использую этот код:
public $components = array('Auth');
public function beforeFilter(Event $event) {
parent::beforeFilter($event);
if($this->Auth->user('role_id')==1 or $this->Auth->user('role_id')==2){ //role: 1 admin, 2 project manager
$this->set('is_admin', true);
}
else
{
$this->Auth->deny(['index','delete']);
$this->set('is_admin', false);
}
$this->set('my_id', $this->Auth->user('id'));
}
Так что теперь каждый раз, когда пользователь, не являющийся администратором или менеджером проекта, пытается выполнить действия index
или delete
, перенаправляется на «Метод неРазрешено "ошибка страницы.Но я хотел бы вернуться на предыдущую страницу с сообщением: «Вы не авторизованы для выполнения этого действия».
Я попытался установить 'unauthorizedRedirect' => $this->referer()
в контроллере приложений:
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'fields' => [
'username' => 'email',
'password' => 'password'
]
]
],
'loginAction' => [
'controller' => 'Users',
'action' => 'login'
],
'unauthorizedRedirect' => $this->referer()
]);
Но не сработало.Единственный способ добиться этого - использовать этот код в функции beforeFilter
контроллера:
if(!($this->Auth->user('role_id')==1 && !$this->Auth->user('role_id')==2 && ($this->request->action === 'index' || $this->request->action === 'delete')){
$this->Flash->error(__('You are not authorized to perform this action'));
return $this->redirect(['controller' => 'Users', 'action' => 'index']);
}
Но, похоже, это неправильный способ сделать это во всех контроллерах, которые яхочу отрицать некоторые действия.Есть ли другой способ?