cakephp被授权在每次操作调用中调用
我在CakePHP应用程序中有一个控制器,其中有一系列操作。我正在使用来管理允许哪个用户在我的控制器中执行哪些操作。我的控制器中有一个isAuthorized()操作,用于检查是否允许某个已登录用户执行请求的操作,该操作如下所示: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('
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秒,除非它的实现非常糟糕。在知道代码实际花费时间之前,不应该开始优化。