Лучший способ разрешить доступ только владельцам и администраторам?

Я программирую сайт в Symfony2, используя FOSUserBundle для управления доступом пользователей. У меня есть объект под названием "Сайт", который может иметь много пользователей. Только связанные пользователи и администраторы должны иметь доступ к сайту: показать действие.

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

Благодарю.

1 ответ

Решение

Если вы хотите ограничить доступ для каждого пользователя на уровне объекта, то вы ищете ACL. https://github.com/Problematic/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()
{
    ...
}
Другие вопросы по тегам