2012-03-09 2 views
0

Нужно знать, если я что-то упустил ... Я использую 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? Предложения?

+0

Я полагаю, что при назначении обоих учетных данных вы получаете Истину как '$ user-> hasCredential ('A')', так и '$ user-> hasCredential ('B')'. Где security.yml? Я читаю действие 'dashboard' ... вы используете sfAdminDashPlugin? – macgyver

+0

security.yml находится в моей папке конфигурации для каждого модуля. Я не использую sfAdminDashPlugin. «dashboard» в моем примере выше - это просто мой именованный модуль. – Patrick

+0

... может по-прежнему использовать некоторую помощь по этой проблеме.Кто-нибудь есть идеи или предложения относительно того, с чего начать устранение этой проблемы? – Patrick

ответ

0

Я собираюсь закрыть этот вопрос, потому что я нашел проблему, и я открою новый вопрос в результате проблемы, связанной с фрагментом кода (который становится новым вопросом).

Смежные вопросы