Symfony 1.4 Разрешения и учетные данные И ИЛИ не работает - PullRequest
0 голосов
/ 09 марта 2012

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

1 Ответ

0 голосов
/ 20 марта 2012

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

...