如何检查所需的用户角色


How to check required user role

当我有这样的安全设置时

security:
    firewalls:
        main:
            # ...
    access_control:
        - { path: ^/secure, roles: ROLE_USER }
        - { path: ^/admin, roles: ROLE_ADMIN }

如何获取请求所需的角色,例如 ROLE_USER用户是否在控制器或服务中/admin访问或ROLE_ADMIN /secure

如果你真的需要这样做:

在控制器中获取当前路由:

$request = $this->container->get('request');
$route = $request->get('_route');

从security.yml读取访问控制:

  • 加载安全.yml: http://symfony.com/doc/current/components/config/resources.html
  • 将 YAML 解析为 php 数组:http://symfony.com/doc/current/components/yaml/introduction.html

更新!

我发现有一个名为 security.access_map ,您可以使用。

阅读此内容: https://stackoverflow.com/a/20194159/982075

/更新

获取路由所需的角色,并在授予该角色时签入控制器:

if ($this->get('security.context')->isGranted('ROLE_ADMIN')) {
    //Do Something
}

做其他事情

只需将其放置在您认为合适的控制器中:

if ($this->get('security.context')->isGranted('ROLE_SMTH')) {
    //Do Something
}

和/或在未授予角色时为重定向编写拒绝访问侦听器,以避免 403 消息。教程:http://www.insanevisions.com/articles/view/symfony-2-access-denied-listener