0

我在 CakePHP 应用程序中有一个控制器,其中有很多操作。我正在使用ACL 组件来管理允许哪些用户在我的控制器中执行哪些操作。我的控制器中有一个 isAuthorized() 操作,用于检查是否允许某个登录用户执行请求的操作,如下所示:

function isAuthorized()
{
    switch($this->action)
    {
        case 'myAction':
            $user_id = $this->Auth->user('id'); // the id of the connected user        

            if($user_id)
            {
                return $this->Acl->check(
                    array('model' => 'MyModel', 'foreign_key' => $user_id),
                    'controllers/MyController/myAction'
                );
            }

            break;
    }
}

正如您在上面看到的,我所做的只是使用Acl 组件myAction的方法检查是否允许连接的用户执行。check这种方法的问题是每次myAction调用时都会执行此检查。有没有办法告诉 Cake 只执行一次此检查(例如在第一次调用操作时)?通过每次检查是否允许用户执行会大大降低应用程序速度的控制器操作。

任何帮助或建议表示赞赏

谢谢

4

1 回答 1

2

从技术上讲,HTTP 是无状态的,每个请求与来自同一用户的任何其他请求没有任何关联。状态完整性是通过使用会话创建的。

您可以将 ACL 检查结果存储在会话变量中。但是,如果用户在登录时更改访问权限,您将需要一些方法来重置它。

于 2013-06-06T00:29:02.547 回答