Нужно знать, если я что-то упустил ... Я использую sfGuardPlugin и пытаюсь получить сложную учетную запись для работы ... и это даже не так сложно. Я просто не могу заставить И или ИЛИ работать.Symfony 1.4 Разрешения и учетные данные И ИЛИ НЕ РАБОТАЮТ
«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');
И он отвечает, как и ожидалось: Правда
Но если я назначу пользователю А и В, а затем попробуйте либо:
echo $user->hasCredential(array('A', 'B'), false);
или
echo $user->hasCredential(array('A', 'B'));
Он отвечает False.
Я в тупике. Что мне не хватает? Я ДОЛЖЕН иметь хотя бы [[OR]] работу. Кто-нибудь еще испытал это? Есть ли работа?
EDIT: фрагмент кода в 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? Предложения?
Я полагаю, что при назначении обоих учетных данных вы получаете Истину как '$ user-> hasCredential ('A')', так и '$ user-> hasCredential ('B')'. Где security.yml? Я читаю действие 'dashboard' ... вы используете sfAdminDashPlugin? – macgyver
security.yml находится в моей папке конфигурации для каждого модуля. Я не использую sfAdminDashPlugin. «dashboard» в моем примере выше - это просто мой именованный модуль. – Patrick
... может по-прежнему использовать некоторую помощь по этой проблеме.Кто-нибудь есть идеи или предложения относительно того, с чего начать устранение этой проблемы? – Patrick