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: как избежать бесконечного цикла?