Как проверить страницы, которые разрешены в контроллере CakePhp 3?

Я пытаюсь создать функцию выхода из системы, которая будет проверять, разрешена ли текущая страница для пользователей, вышедших из системы. Если это так, я буду оставаться на странице, если нет, я буду перенаправлять на главную страницу. Мне было интересно, как проверить, разрешена ли текущая страница. Я могу проверить, авторизованы ли они этим кодом:

public function logout()
{
if($this->isAuthorized($this->Auth->user())) {
$this->Auth->logout();
$redirect = $this->redirect($this->referer());
} else {
$this->Auth->logout();
$redirect = $this->redirect(['controller' => 'pages', 'action' => 'home']);
}
return $redirect;
}

но я не могу проверить, разрешена ли текущая страница:

public function logout()
{
if(in_array($this->request->here, $this->Auth->allow())) {
$this->Auth->logout();
$redirect = $this->redirect($this->referer());
} else {
$this->Auth->logout();
$redirect = $this->redirect(['controller' => 'pages', 'action' => 'home']);
}
return $redirect;
}

3

Решение

Лучшая практика заключается в использовании $this->Auth->allowedActionsтогда как компонент Auth хранит разрешенные действия в allowedAction имущество.
Вы можете назвать их следующим образом:

$actions = $this->Auth->allowedActions;
1

Другие решения

Я разобрался с ответом, но если есть лучший способ сделать это, я все еще хотел бы знать. Я передаю действие в скрытом вводе методу контроллера и проверяю, в массиве allowPages.

public $allowedPages = [];
public function beforeFilter(Event $event)
{
parent::beforeFilter($event);
$this->allowedPages = ['checkout', 'charge', 'logout'];
$this->Auth->allow($this->allowedPages);
}

public function logout()
{
if(in_array($this->request->data('action'), $this->allowedPages)) {
$this->Auth->logout();
$redirect = $this->redirect($this->referer());
} else {
$this->Auth->logout();
$redirect = $this->redirect(['controller' => 'pages', 'action' => 'home']);
}
return $redirect;
}
0