cakephp isAuthorized () не называется

Я пытаюсь использовать метод isAuthorized () для проверки флажка администратора, но функция никогда не вызывается. Даже когда я устанавливаю функцию, чтобы всегда возвращать false, она позволяет любому пользователю. Просто кажется, что его не называют.

Мне нужно сделать что-то большее, чем установить $ this-> Auth-> authorize = 'controller'?

из /app/app_controller.php

class AppController extends Controller { var $components = array('Auth'); function beforeFilter() { $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login'); $this->Auth->loginRedirect = array('controller' => 'pages', 'display' => 'home'); $this->Auth->logoutRedirect = '/'; $this->Auth->authorize = 'controller'; $this->Auth->userScope = array('User.active' => 1); } function isAuthorized() { if (strpos($this->action, "admin_") != false) { if ($this->Auth->user('isAdmin') == '0') { return false; } } return true; } } 

Вы должны проверить, не перекрываете ли вы свои настройки Auth в другом контроллере.

Во-первых, чтобы проверить, isAuthorized() , попробуйте поставить простую debug($this); die; debug($this); die; в этом.

Если он не умирает, вы, вероятно, переопределяете его в каком-то другом контроллере (вам не хватает вызова parent::isAuthorized() ).

Если это не так, то вы, вероятно, делаете то же самое с beforeFilter() .

В дополнение к Ответу доктора Ганнибала Лектера есть еще одна возможная причина, если у вас возникла эта проблема (как я это сделал …):

Если ваш контроллер называется tests_controller , метод startUp для Auth-Component прерывается без запуска аутентификации (по крайней мере, в cakePHP 1.3.10 – не проверял 2.x). Поэтому убедитесь, что вы никогда не называете Controller tests_controller

Выдержка из cake \ libs \ controller \ components \ auth.php

 function startup(&$controller) { $isErrorOrTests = ( strtolower($controller->name) == 'cakeerror' || (strtolower($controller->name) == 'tests' && Configure::read() > 0) ); if ($isErrorOrTests) { return true; } ... 

вам нужно убедиться, что «Auth» находится в массиве компонентов для этого контроллера:

 $this->components[] = 'Auth'; 

оставьте это в конструкторе и он должен работать (если, конечно, это не так). Удачи!