Разрешения и учетные данные Symfony 1.4 И ИЛИ не работаютPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Разрешения и учетные данные Symfony 1.4 И ИЛИ не работают

Сообщение Anonymous »

Нужно знать, если я что-то упустил... Я использую 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;
}
РЕДАКТИРОВАТЬ:

Приведенный выше фрагмент кода действительно является проблемой. Я протестировал его без фрагмента кода, и он работает так, как ожидалось. Итак, мой следующий вопрос: как настроить фрагмент, чтобы он включал экземпляры с И или ИЛИ? Предложения?

Подробнее здесь: https://stackoverflow.com/questions/963 ... ot-working
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»