Я пытаюсь использовать метод 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';
оставьте это в конструкторе и он должен работать (если, конечно, это не так). Удачи!