cakephp isAuthorized()没有被调用

时间:2009-04-20 15:30:40

标签: php authentication cakephp

我正在尝试使用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;
}
}

3 个答案:

答案 0 :(得分:12)

您应该检查是否覆盖了其他控制器中的Auth设置。

首先,要验证是否正在调用isAuthorized(),请尝试在其中添加一个简单的debug($this); die;

如果它没有死亡,你可能会在其他控制器中覆盖它(你错过了parent::isAuthorized()电话)。

如果不是这样,那么你可能会对beforeFilter()做同样的事情。

答案 1 :(得分:1)

除了Hannibal Lecter博士的答案之外,如果你遇到这个问题还有另一个可能的原因(正如我所做的那样......):

如果您的控制器名为 tests_controller ,则Auth-Component的startUp方法将在不启动身份验证的情况下中止(至少在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;
    }
...

答案 2 :(得分:-4)

您需要确保'Auth'位于该控制器的components数组中:

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

删除它在构造函数中它应该工作(当然,除非它没有)。祝你好运!