【问题标题】:cakephp ACL permissions inside loops循环内的 cakephp ACL 权限
【发布时间】:2012-03-20 16:12:27
【问题描述】:

假设我的数据库中有一个名为users 的表,我想检查表中的所有用户是否都有权执行某个控制器操作。如果我这样做:

foreach($users as $user)
{
    // check if user has permission to execute action
    $is_allowed = $this->Acl->check(
            array('model'=>'User', 'foreign_key'=>$the_user_id),
                'controllers/MyController/action_to_be_executed');

    if(!$is_allowed)
    {
        // give permission to user
        $this->Acl->allow(
            array('model'=>'User', 'foreign_key'=>$the_user_id),
                'controllers/MyController/action_to_be_executed');
    }
}

显然,如果我有类似上面的内容,我的表中的用户越多,这段代码就会越慢。有谁知道我如何优化它以使其运行得相当快,即使我的表包含超过 5,000 个用户?有什么建议吗?

提前致谢

【问题讨论】:

    标签: php cakephp cakephp-1.3 acl


    【解决方案1】:

    首先想到的是使用

    $this->Auth->allow('action_to_be_executed');
    

    MyController 控制器代码中,但实际上这可能不是您想要做的,因为它会授予任何人访问权限,甚至是未登录的访问者。

    如果您的目标是向任何经过身份验证的用户授予访问权限,那么这可能不是为每个 user <-> action_to_be_executed 对添加特定权限的优化解决方案。

    相反,您可以将用户链接到一个角色(如果尚未完成),并向每个角色授予对 action_to_be_executed 操作的访问权限。因此它将极大地限制aros_acos 表中的权限记录数量,而且您根本不需要执行您的代码,这将是一个不错的优化;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-17
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多