2012-10-03 3 views
1

Я реализовал функцию ACL, управляемую базой данных, используя контроллер plugin predispatch().Zend framework Обработка ошибок с помощью ACL

Работает нормально. Но он прекратил отправлять запросы на мой контроллер ошибок.

например, если указанный контроллер/действие не определено, тогда система показывает сообщение «Отказано в доступе» вместо того, чтобы показывать «Запрос/страница не найдена».

Так что мой вопрос, как я могу реализовать как ACl, так и обработку ошибок в одном плагине с использованием метода predispatch().

Любая помощь пожалуйста.

ответ

1

В плагине контроллера, перенаправить к контроллеру ошибки, если это необходимо:

$request 
    ->setModuleName('default') 
    ->setControllerName('error') 
    ->setActionName('access') 
    ->setDispatched(true); 

accessAction должен быть введен в контроллер ошибок, если вы хотите специальную страницу, или вы можете просто использовать существующий ErrorAction

+0

Это не совсем то, что я хочу. Я думаю, что вы не пропустили то, что я прошу – Lucifer

+0

Тогда ваш вопрос может быть оптимизирован. – Sven

1

Вы должны установить разрешение для контроллера ошибок в своей БД.

Так что текущий пользователь (идентификатор роли) должен иметь разрешение на доступ к контроллеру ошибок.

Я не знаю, что вы структура таблиц БД, но на моем пути (вероятно, аналогично):

INSERT INTO "resources" ("id","name","description") VALUES (11,'error', 'Error controller'); 
INSERT INTO "permissions" ("role_id", "resource_id", "is_allowed") VALUES (1, 11, 't'); 

Первая вставка в таблице ресурсов, а затем в таблице разрешений.

0

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

if (!$this->has('Default_Error')) { 
    $this->addResource('Default_Error'); 
    $this->allow('guest', 'Default_Error'); 
} 

Таким образом, каждый может видеть контроллер ошибок.

Смежные вопросы