Symfony 1.4权限和凭据和OR无效

时间:2012-03-09 15:05:51

标签: symfony1 symfony-1.4

需要知道我是否遗漏了某些内容......我正在使用sfGuardPlugin并尝试获取复杂的凭据......而且它甚至不复杂。我不能让AND或OR工作。

" USER_A"设置为拥有许可" A"在权限和组" A"也有权限" A"分配给它。

我还有一份许可" B"和一群" B"以与上面相同的方式设置...但是,我没有将user_a分配给这些权限。要明确:user_a只有A权限。

现在在安全方面,我有以下内容(用户需要具有凭证A或B):

dashboard:
  credentials: [[A, B]]

现在,当我尝试让user_a访问仪表板时,它会失败并重定向到所需的凭据页面。我使用AND语句尝试了相同的操作,并使用以下方法设置user_a:

dashboard:
  credentials: [A, B]

......再次,它失败了。

现在,当我删除括号,只使用一个凭证时,一切都完美无缺。只是当我以任何形式组合使用它们时,我遇到了问题。

此外,我已使用以下方法检查用户是否拥有单个凭据:

echo $user->hasCredential('A');

它按预期响应:真实

但是,如果我将用户分配给A和B,然后尝试:

echo $user->hasCredential(array('A', 'B'), false);

echo $user->hasCredential(array('A', 'B'));

它以False回应。

我很难过。我错过了什么?我必须至少有[[OR]]工作。还有其他人经历过这个吗?有解决方法吗?

编辑:myUser.class中的代码段:

public function hasCredential($permission_name)
    {
    //this overrides the default action (hasCredential) and instead of checking
    //the user's session, it now checks the database directly.  
    if (!$this->isAuthenticated()) {
      return false;
    }
    $gu = $this->getGuardUser();
    $groups = $gu->getGroups();
    $permissions = $gu->getPermissions();

    $permission_names = array();
    foreach($permissions as $permission) {
      $permission_names[] = $permission->getName();
    }
    foreach($groups as $group) {
      $group_permissions = $group->getPermissions();
      foreach($group_permissions as $group_permission) {
        $permission_names = array_merge($permission_names, array($group_permission->getName()));
      }
    }
    $permission_names = array_unique($permission_names);
    return (in_array($permission_name, $permission_names)) ? true : false;
  }

编辑:

上面的代码片段确实是问题所在。我在没有代码片段的情况下测试了它,它按预期工作。所以我的下一个问题是,如何调整代码片段来容纳带有AND或OR的实例?建议?

1 个答案:

答案 0 :(得分:0)

我要关闭这个问题,因为我已经发现了问题,并且由于我在代码片段中遇到的问题(这将成为一个新问题),我将打开一个新问题。