我在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组件的方法check
来执行myAction
。这种方法的问题是每次调用myAction
时都要进行检查。是否有一种方法可以告诉Cake只执行一次检查(例如,在第一次调用该操作时)?通过每次检查用户是否被允许执行一个减慢应用程序速度的控制器动作。
感谢任何帮助或建议
谢谢
从技术上讲,HTTP是无状态的,每个请求与来自同一用户的任何其他请求没有任何关联。状态完备是通过使用会话创建的。
可以将ACL检查结果存储在会话变量中。但是,如果用户在登录时访问权限发生变化,则需要通过某种方式重置它。