Лучший способ разрешить доступ только владельцам и администраторам?
Я программирую сайт в 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()
{
...
}