"user_a" настроен на наличие разрешения "A" как в разрешениях, так и в группе "A", которой также назначено разрешение "A".
У меня также есть разрешение «B» и группа «B», настроенные таким же образом, как указано выше... однако я не назначал user_a этим разрешениям . Чтобы внести ясность: user_a имеет только разрешения A.
Теперь в области безопасности у меня есть следующее (когда пользователю необходимо иметь учетные данные A или B):
Код: Выделить всё
dashboard:
credentials: [[A, B]]
Код: Выделить всё
dashboard:
credentials: [A, B]
Теперь, когда я удаляю скобки и использую только одну учетные данные, все работает отлично. Просто когда я использую их в сочетании, в любой форме, у меня возникают проблемы.
Кроме того, я проверил, имеет ли пользователь единые учетные данные, используя:
Код: Выделить всё
echo $user->hasCredential('A');
Но если я назначу пользователя как A, так и B, а затем попробуйте либо:
Код: Выделить всё
echo $user->hasCredential(array('A', 'B'), false);
Код: Выделить всё
echo $user->hasCredential(array('A', 'B'));
Я в тупике. Что мне не хватает? У меня ДОЛЖЕН быть хотя бы работающий [[ИЛИ]]. Кто-нибудь еще испытал это? Есть ли обходной путь?
РЕДАКТИРОВАТЬ: фрагмент кода в 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;
}
Приведенный выше фрагмент кода действительно является проблемой. Я протестировал его без фрагмента кода, и он работает так, как ожидалось. Итак, мой следующий вопрос: как настроить фрагмент, чтобы он включал экземпляры с И или ИЛИ? Предложения?
Подробнее здесь: https://stackoverflow.com/questions/963 ... ot-working
Мобильная версия