symfony2 FOSUserBundle отсоединить роль от пользователя

У меня есть приложение, где пользователь может быть связан с несколькими компаниями. Отношения ManyToMany с компанией - это выдающаяся организация под названием Associate.

Я хотел бы дать этому ассоциированному объекту ту же роль, что и у моего объекта FOSUserBundle User. Важно: если у пользователя есть role_manager для одной компании, ему не следует предоставлять права доступа к определенным функциям другой компании, к которой он принадлежит.

Есть ли чистый способ сделать это? Я хотел бы проверить, например, истинно ли $this->getUser->getAssociate->hasRole('ROLE_MANAGER').

Что, если я передам массив моей роли Associate? Я читал, что это недостаточно безопасно? Зачем? Что может кто-то сделать, чтобы сломать эту безопасность, если мои пользователи все равно должны будут пройти проверку входа в систему безопасности FOS?

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

РЕДАКТИРОВАТЬ: если существует лучшее решение без участия ролей или с другой логикой, мне интересно узнать об этом!!

1 ответ

Решение

Так что в моем случае, я на самом деле один пользователь может быть связан только с максимум 4 компаниями, каждая из которых имеет свой вид, определенный своей категорией.

Официальный документ предложил бы использовать ACL, определить роль для каждой компании или сохранить данные в организации. см. первые абзацы: http://symfony.com/doc/current/cookbook/security/acl.html

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

Смотрите мой избиратель здесь: symfony2 вызов is_granted в voter: как избежать бесконечного цикла?

Другие вопросы по тегам