需要知道我是否遗漏了某些内容......我正在使用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的实例?建议?
答案 0 :(得分:0)
我要关闭这个问题,因为我已经发现了问题,并且由于我在代码片段中遇到的问题(这将成为一个新问题),我将打开一个新问题。