Как мне создать маршрут с отказом в доступе в CakePHP?

#php #cakephp #acl

#php #cakephp #acl

Вопрос:

Просматривая руководства по настройке компонентов Auth и ACL, я обнаружил, что когда авторизованный пользователь обращается к области моего сайта, на которую у него нет разрешений, они перенаправляются в / .

Это не ограничение показа, так как я всегда могу перенаправить их в соответствующее место с моей домашней страницы или просто отобразить там ошибку, но это кажется своего рода хакерством. Есть ли способ указать, куда ACL должен перенаправлять пользователя, если у него нет доступа к определенному представлению? В этом случае я просто хотел бы настроить простую глобальную страницу с ошибкой отказа в доступе. Даже повторное перенаправление их на страницу входа было бы отчасти приемлемым, но домашняя страница просто кажется действительно странной для использования системой по умолчанию.

Комментарии:

1. Что плохого в использовании сеанса. Инструкция Flash() для отображения ошибки?

2. Вообще ничего — на моей странице ошибок это именно то, что я хотел бы сделать. Я просто не хочу, чтобы моя страница с ошибкой также была домашней страницей.

Ответ №1:

Вы могли бы установить $this-> Auth->authorize = ‘controller’, затем указать перенаправление в обратном вызове isAuthorized().

http://book.cakephp.org/view/1275/authorize

http://api13.cakephp.org/view_source/auth-component/#line-508

Вы также могли бы протестировать $this-> Auth-> user() на наличие достаточных привилегий и перенаправить при сбое:

 if ($this->Auth->user('level') < 2) {
    $this->redirect('/users/declined');
}
  

В противном случае Auth-> redirect() извлекает все, что установлено для свойства login redirect, значение которого по умолчанию равно / . Смотрите http://api13.cakephp.org/view_source/auth-component/#line-745