Zend ACL - необычные ошибки в лог-файле
Это немного странно, потому что я вижу эти ошибки в моих файлах журналов, и ни одна из них не соответствует моим ресурсам. Infact Я даже не распознаю ни один из этих ресурсов, которые отображаются в файлах ошибок
2010-12-26T12:19:46+00:00 ERR (3): ресурс сообщения об ошибке 'res' не найден 2010-12-26T12:19:46+00:00 ERR (3): трассировка стека #0 /var/www/application/library/Zend/Acl.php(691): Zend_Acl->get('res') #1 /var/www/application/library/My/Controller/Plugin/Acl.php(29): Zend_Acl->isAllowed('guest', 'res', '2127250264.html') 2010-12-26T12:50:21+00:00 ERR (3): ресурс сообщения об ошибке 'fcs' не найден 2010-12-26T12: 50: 21 + 00: 00 ERR (3): трассировка стека #0 /var/www/application/library/Zend/Acl.php(691): Zend_Acl->get('fcs') #1 /var/www/application/library/My/Controller/Plugin/Acl.php(29): Zend_Acl->isAllowed('guest', 'fcs', 'identif2') 2010-12-26T12:50:22+00:00 ERR (3): Ресурс сообщения об ошибке "open" не найден 2010-12-26T12: 50: 22 + 00: 00 ERR (3): трассировка стека # 0 /var/www/application/library/Zend/Acl.php(691): Zend_Acl-> get ('open') # 1 /var/www/application/library/My/Controller/Plugin/Acl.php(29): Zend_Acl-> isAllowed ('guest', 'open', '1')
Resource res, fcs, open или 2127250264.html - это не ресурсы в моем приложении - поэтому я не уверен, что означают эти ошибки.
Может кто-нибудь пролить свет на то, как я могу отладить это.
РЕДАКТИРОВАТЬ
Класс My_Controller_Plugin_Acl extends Zend_Controller_Plugin_Abstract { private $_acl = null; публичная функция __construct(Zend_Acl $acl) { $this->_acl = $acl; } публичная функция preDispatch(Zend_Controller_Request_Abstract $request) { // Как и в предыдущем примере, авторизованные пользователи будут иметь роль пользователя $role = (Zend_Auth::getInstance()->hasIdentity())? "Пользователь": 'гость'; $controller = $request->getControllerName(); $action = $request->getActionName(); $requestUri = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri(); $session = new Zend_Session_Namespace('lastRequest'); // Временное исправление, чтобы не сохранять изображение-вид как последний запрошенный URL if(strpos($requestUri, 'snapshot')==false && $controller!= 'register' && $controller!= 'login' && $action!= 'view-image' && $action!= 'play-video' && $action!= 'config') { // сохранить запрошенное действие, только если оно не авторизовано $session->lastRequestUri = $requestUri; } if(!$this->_acl->isAllowed($role, $controller, $action)) { // Если у пользователя нет доступа, мы отправляем его в другое место, изменяя запрос $ Request->setModuleName('по умолчанию') ->setControllerName('Войти') ->setActionName('войти'); } } }
И это класс, где я определил ресурсы
класс My_Acl расширяет Zend_Acl { публичная функция __construct() { // Добавить новую роль с именем "гость" $this->addRole(new Zend_Acl_Role('guest')); // Добавить роль с именем user, которая наследуется от guest $this->addRole(new Zend_Acl_Role('user'), 'guest'); // Добавить ресурс с именем page $this->add(new Zend_Acl_Resource('video')); $this->add(new Zend_Acl_Resource('error')); $this->add(new Zend_Acl_Resource('index')); $this->add(new Zend_Acl_Resource('login')); $this->add(new Zend_Acl_Resource('register')); $this->add(new Zend_Acl_Resource('profile')); $this->add(new Zend_Acl_Resource('edit-profile')); $this->add(new Zend_Acl_Resource('css')); $this->add(new Zend_Acl_Resource('js')); $this->add(new Zend_Acl_Resource('images')); $this->add(new Zend_Acl_Resource('snapshots')); // Наконец, мы хотим разрешить гостям просматривать страницы $this->allow('guest', 'css'); $this->allow('guest', 'js'); $this->allow('guest', 'snapshots'); $this->allow('guest', 'images'); $this->allow('guest', 'error'); $this->allow('guest', 'login'); $this->allow('guest', 'index'); $this->allow('guest', 'register'); $this->allow('guest', 'profile','view-profile'); $this->allow('guest', 'profile','view-image'); $this->allow('guest', 'profile','all-videos'); $this->allow('guest', 'profile','all-fan'); $ this-> allow ('guest', 'profile', 'Favorites-Artist'); $ this-> allow ('guest', 'profile', 'Favorites-videos'); $this->allow('guest', 'video','display-thumb'); $this->allow('guest', 'video', 'config'); $this->allow('guest', 'video', 'play'); $this->allow('guest', 'video', 'play-video'); $this->allow('guest', 'video', 'new-videos'); $this->allow('guest', 'video', 'category'); $this->allow('guest', 'video', 'index'); $this->allow('guest', 'video', 'search'); $this->allow('user', 'video'); $this->allow('user', 'profile'); } }
2 ответа
Недавно у меня были такие же странные сообщения. Как предположил Томаш, я просмотрел журналы доступа apache и обнаружил, что отсутствуют файлы, запрошенные одним из моих css-листов.
Поэтому, если в вашей общей папке отсутствует файл - вы можете получить такие ошибки, как
2011-02-22T02:44:49+03:00 DEBUG (7): Resource 'css' not found
/usr/local/Zend/Acl.php(777): Zend_Acl->get('css')
/home/www/public_html/application/plugins/AccessControl.php(61): Zend_Acl->isAllowed('guest', 'css', 'img')
Чтобы решить эту проблему - просто найдите и удалите запросы на отсутствующие файлы в вашем CSS, HTML и т. Д.
Я бы предположил (не видя ваш My/Controller/Plugin/Acl.php), что вы извлекаете свои ресурсы из имени контроллера / модуля / действия. И кто-то получил доступ к URL-адресу, который вы не ожидаете посетить (возможно, из более старой версии вашего приложения, которое раньше имело другие URL-адреса).