【问题标题】:weird cakePHP isAuthorized() issue奇怪的 cakePHP isAuthorized() 问题
【发布时间】:2012-03-20 12:15:33
【问题描述】:

我正在使用 cakePHP 的 isAuthorized() 函数来检查用户是否被授权执行控制器操作,但我遇到的奇怪问题是我的其他控制器操作的权限也被用户屏蔽了。我只是这样做:

function isAuthorized()
{
    $user_id_logged_in = $this->Auth->user('id');

    switch($this->action)
    {
        case: 'my_action':

        if($user_id_logged_in)
        {
             // check if user has access to execute controller action
             return $this->Acl->check(array(
                                'model' => 'MyModel', 'foreign_key' => $my_foreign_key), 
                                'controllers/MyController/'.$this->action);
        }
        else
        {
             return false;
        }

        break;
    }
}

我想检查登录的用户是否有权执行操作my_action。但是当我这样做时,用户也会失去对我控制器中其他操作的权限。知道这有什么问题吗?

谢谢

【问题讨论】:

  • 你在哪里设置$user_id_logged_in
  • $user_id_logged_in 正好等于$this->Auth->user('id');
  • 从文档中我可以看出,check() 方法采用 3 个字符串参数。 check($aro, $aco, $action = "*")。可以看到here
  • 我可以在书中看到你的版本。
  • 你搞定了吗?我还认为MyModel 应该是您的用户模型的名称(User 可能),$my_foreign_key 应该是 $user_id_logged_in

标签: php cakephp permissions cakephp-1.3 acl


【解决方案1】:

我认为问题在于您没有在 isAuthorized() 的末尾返回任何值,因此 cake 假定它是 false 并因此拒绝访问其他所有内容。

如果您对授权访问其他函数不感兴趣,请尝试在函数末尾添加 return true;(或者,将它们添加到 Auth 中的“允许”列表中)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多