Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
cakephp被授权在每次操作调用中调用_Php_Cakephp_Cakephp 1.3 - Fatal编程技术网

cakephp被授权在每次操作调用中调用

cakephp被授权在每次操作调用中调用,php,cakephp,cakephp-1.3,Php,Cakephp,Cakephp 1.3,我在CakePHP应用程序中有一个控制器,其中有一系列操作。我正在使用来管理允许哪个用户在我的控制器中执行哪些操作。我的控制器中有一个isAuthorized()操作,用于检查是否允许某个已登录用户执行请求的操作,该操作如下所示: function isAuthorized() { switch($this->action) { case 'myAction': $user_id = $this->Auth->user('

我在CakePHP应用程序中有一个控制器,其中有一系列操作。我正在使用来管理允许哪个用户在我的控制器中执行哪些操作。我的控制器中有一个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
。这种方法的问题是每次调用
myAction
时都会执行此检查。有没有办法告诉Cake只执行一次此检查(例如在第一次调用操作时)?。通过每次检查是否允许用户执行控制器操作,从而大大降低应用程序的速度

任何帮助或建议都将不胜感激


谢谢

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


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

“每次检查是否允许用户执行控制器操作,从而大大降低应用程序的速度。”真的吗?与整个请求相比,执行访问检查需要多少时间?因为一些控制器操作被调用了很多次,这就是为什么应用程序会变慢的原因,因为每次我调用该操作时,cake都必须执行检查。这就是为什么我只想进行一次检查,但检查多少?你是怎么测量时间的?我不需要测量时间。如果每次我点击一个按钮,我必须等待5秒才能得到答案,这是一个缓慢的应用程序,ACL检查大约是1/1000秒,除非它的实现非常糟糕。在知道代码实际花费时间之前,不应该开始优化。