Я программирую сайт в Symfony2, используя FOSUserBundle для управления доступом пользователей. У меня есть объект под названием «Сайт», который может иметь много пользователей. Только связанные пользователи и администраторы должны иметь доступ к сайту: показать действие.
Я не знаю, можно ли это сделать в security.yml
или если я должен сделать это прямо в контроллере или где-то еще. Каков рекомендуемый способ?
Благодарю.
Если вы хотите ограничить доступ для каждого пользователя на уровне объекта, то вы ищете ACL . ProblematicAclManagerBundle – прекрасная оболочка, упрощающая использование ACL в контроллерах.
В противном случае, если вы хотите ограничить доступ для каждой роли, вы можете использовать маршруты и роли, определенные в security.yml
Вот пример того, как он должен выглядеть:
access_control: - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } - { path: ^/admin, role: ROLE_ADMIN } - { path: ^/.*, role: [IS_AUTHENTICATED_ANONYMOUSLY] }
В вашем контроллере вы также можете использовать:
use JMS\SecurityExtraBundle\Annotation\Secure; /** * @Route("/home", name="home") * @Secure(roles="ROLE_USER") */ public function indexAction() { ... }