【问题标题】:Multiple roles required for same url in symfony 2symfony 2中相同的url需要多个角色
【发布时间】:2013-01-25 18:03:53
【问题描述】:

这就是我的 security.yml 在访问控制列表中的样子:

access_control:
    - { path: ^/admin, roles: IS_AUTHENTICATED_FULLY }
    - { path: ^/admin, roles: ROLE_ADMIN }

我想要做的是用户必须同时具有两个角色(ROLE_ADMIN 和 IS_AUTHENTICATED_FULLY)才能访问定义的路径。但是使用上述规则,如果用户具有任何一个角色,则用户可以访问我不想要的定义的路径。我也尝试过如下给出规则但没有成功:

 - { path: ^/admin, roles:[ROLE_ADMIN,IS_AUTHENTICATED_FULLY] }

如何添加要求用户同时具有两个角色才能访问定义的路径的规则?

【问题讨论】:

  • 那么,您找到答案了吗?您检查为正确的那一项似乎是错误的。

标签: symfony symfony-2.1


【解决方案1】:
IS_AUTHENTICATED_FULLY

当用户实际通过身份验证时返回 true。

匿名用户经过技术验证,这意味着 匿名用户对象的 isAuthenticated() 方法将返回 true。 要检查您的用户是否真正通过了身份验证,请检查 IS_AUTHENTICATED_FULLY 角色。

因此,如果用户具有角色 ROLE_ADMIN 并已登录,则他已完全通过身份验证。因此无需设置此要求:

- { path: ^/admin, roles: IS_AUTHENTICATED_FULLY }

因为您拥有(见下文)其中包括经过完全身份验证的蜜蜂

- { path: ^/admin, roles: ROLE_ADMIN }

- { path: ^/admin, roles: IS_AUTHENTICATED_FULLY }

将允许任何用户查看管理部分。

阅读:http://symfony.com/doc/current/book/security.html

【讨论】:

  • IS_AUTHENTICATED_REMEMBERED 表示用户使用 cookie 登录,IS_AUTHENTICATED_FULLY 表示用户必须通过登录页面登录。所以根据你的说法,当用户没有登录时,用户仍然可以访问管理部分吗?
  • 好吧匿名用户无法访问管理页面,我已经测试过了
  • 不,这意味着任何通过登录验证的用户都可以看到管理页面
  • 您不需要同时要求这两个规则,ROLE_ADMIN 就足够了,因为它包括经过完全身份验证或被记住。
  • 是的,没错,我想要的是管理员用户必须具有角色 IS_AUTHENTICATED_FULLY,即管理员用户必须经过完全身份验证(不是基于 cookie 的管理员身份验证)
【解决方案2】:

着眼于问题本身,而不是你的具体情况。

如果您需要用户拥有所有指定角色才能访问某个路径,则需要进行更多配置,因为如果当前安全令牌至少具有一个指定角色,则默认RoleVoter 授予访问权限。

RoleVoter 如果令牌具有至少一个传递的角色,则授予访问权限,但安全组件将每个指定角色单独传递给每个选民。因此,要将 OR 行为更改为 AND 行为,您需要做的就是更改决策管理器策略:

# app/config/security.yml
security:
    access_decision_manager:
        # strategy can be: affirmative (default one), unanimous or consensus
        strategy: unanimous # if any voter returns ACCESS_DENIED, access is denied

【讨论】:

    【解决方案3】:

    如果我没有误会,我认为是分层角色
    是更好的方法http://symfony.com/doc/current/book/security.html#hierarchical-roles)。

    #分层角色 您可以通过创建角色层次结构来定义角色继承规则,而不是将许多角色与用户相关联: YAML 应用程序/配置/security.yml 安全: ... 角色层次结构: ROLE_ADMIN:ROLE_USER ROLE_SUPER_ADMIN:ROLE_ADMIN ROLE_BOTH_ROLE_TOGETHER:[IS_AUTHENTICATED_FULLY,ROLE_ADMIN]

    他们 oyu 可以检查层次结构。

    【讨论】:

    • IS_AUTHENTICATED_FULLY 不被视为角色,至少在 Symfony 4 中没有,所以这个检查不起作用。
    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2011-02-13
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    相关资源
    最近更新 更多