#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