我在CakePHP应用程序中有一个控制器,我有一堆操作。我正在使用ACL Component来管理允许哪个用户在我的控制器中执行哪些操作。我的控制器中有一个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只执行一次这样的检查(例如在第一次调用动作时)?通过每次检查是否允许用户执行控制器操作来大大减慢应用程序的速度。
感谢任何帮助或建议
谢谢
答案 0 :(得分:2)
从技术上讲,HTTP是无状态的,并且每个请求与来自同一用户的任何其他请求没有任何关联。通过使用会话创建状态丰满度。
您可以将ACL检查结果存储在会话变量中。但是如果用户访问权限在登录时发生变化,则需要某种方法来重置它。