В моем симфони проекте, используя связку ФОС, у меня есть 4 роли, как это:ФОС пользователя: разрешить маршрут ко многим ролям, даже если пользователь имеет только одну роли
ROLE_USER_ONE
ROLE_USER_TWO
ROLE_USER_THREE
Они не могут получить доступ к тому же просмотров, за исключением одного. Это мой контроллер для визуализации представления:
/**
* @Security("has_role('ROLE_USER_ONE', 'ROLE_USER_TWO', 'ROLE_USER_THREE')")
* @Route("/add-note", name="add_user_note")
* @Method({"GET"})
*/
public function addNoteToUserAction()
{
$securityContext = $this->container->get('security.authorization_checker');
if ($securityContext->isGranted('ROLE_USER_ONE', 'ROLE_USER_TWO', 'ROLE_USER_THREE')) {
/* ... some persist datas and process here ... */
return $this->render('MyBundle:NoteUser:addNote.html.twig', array(
));
} else {
throw new \Exception('You have no right to access this page');
}
}
Чтобы протестировать рендеринг вида, создать пользователя с ролью ROLE_USER_TWO. И когда я вынести мнение у меня есть эта ошибка:
Expression "has_role('ROLE_USER_ONE', 'ROLE_USER_TWO', 'ROLE_USER_THREE')" denied access.
Как я понимаю, Symfony ожидал пользователь имеет все роли, как я могу позволить доступ на просмотр пользователя Wich как у менее одной из этих ролей в моей аннотации контроллера и код контроллера?
Я считаю, что вы делаете сейчас, чтобы заставить пользователя иметь ВСЕ эти роли. Попробуйте что-нибудь вроде (has_role ('ROLE_USER_ONE') или has_role ('ROLE_USER_TWO') или has_role ('ROLE_USER_THREE')) –
if ($ securityContext-> isGranted ('ROLE_USER_ONE') || $ securityContext-> isGranted ('ROLE_USER_TWO') || $ securityContext-> isGranted ('ROLE_USER_THREE'), я думаю. Но, возможно, есть лучший способ – Letsrocks
Кроме того, если вы используете @Security Annotation, вам не нужно повторять то же самое в функции –