【问题标题】:How to check required user role如何检查所需的用户角色
【发布时间】:2023-03-10 18:09:02
【问题描述】:

当我有这样的安全设置时

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

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

【问题讨论】:

  • 我更新了答案,因为我找到了更好的解决方案。

标签: php security symfony


【解决方案1】:

如果您真的需要这样做:

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

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

从 security.yml 中读取访问控制:

更新!

我发现有一个服务叫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

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 2010-10-20
    • 2020-08-04
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多