Нужно знать, что я что-то упустил ... Я использую sfGuardPlugin и пытаюсь получить сложные учетные данные для работы ... и это даже не так сложно.Я просто не могу заставить И или ИЛИ работать.
«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');
И он отвечает, как и ожидалось: True
Но если я назначу пользователюи A, и B, а затем попробуйте либо:
echo $user->hasCredential(array('A', 'B'), false);
, либо
echo $user->hasCredential(array('A', 'B'));
Ответ - False.
Я в тупике.Что мне не хватает?У меня ДОЛЖЕН быть хотя бы [[ИЛИ]] рабочий.Кто-нибудь еще испытывал это?Есть ли обходной путь?
РЕДАКТИРОВАТЬ: фрагмент кода в 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?Предложения?