【问题标题】:Symfony granting path access to multiple roles in security.ymlSymfony 在 security.yml 中授予对多个角色的路径访问权限
【发布时间】:2013-10-27 12:17:13
【问题描述】:

您好,我希望能够根据具有ROLE_TEACHERROLE_ADMIN 的用户访问security.yml 中的路径。

根据Multiple roles required for same url in symfony 2 中的问题,下面的条目应允许任一角色访问。

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

但是,这将只允许顶级角色访问。有没有办法让多个角色访问单个路径?

【问题讨论】:

  • 替换实体的顺序仍然只会导致其中一个角色起作用。以下两个答案中的任何一个都允许使用多个角色。
  • 多个具有相同模式的条目将不起作用。第一个匹配条目优先。

标签: php security symfony roles access-control


【解决方案1】:

您可以使用security.yml中的角色层次结构:

role_hierarchy:
    ROLE_ADMIN: [ROLE_TEACHER]

#...

access_control:
    - { path: ^/admin, roles: ROLE_TEACHER}

所以所有这些角色都可以访问该路径。

【讨论】:

  • 如果 role1 继承了 role2 那么它将可以访问它的所有路径。如果您只希望两个角色都可以访问 1 个公共路径并且每个角色都有 5 个,那么此示例不起作用。
  • @Udan doc 谈到了层次结构,当您的应用程序具有干净的结构时,它在大多数情况下都能很好地工作。
  • 我没有说错,只是它并不适用于所有情况。问题在于“对单个路径具有多个角色的访问权限”,而不是其他角色可以访问的所有路径。
  • @Udan 你对所有情况都是正确的。我认为像你这样的回答并不适用于所有情况。
【解决方案2】:

这是要走的路和我正在使用的东西:

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

【讨论】:

  • 如果用户具有它有权访问的一个或另一个角色。您可以将它与@sergrkv 答案中的角色层次结构结合起来,然后如果用户在层次结构链中具有角色,则用户可以访问 rout
  • "这在 OR 逻辑中有效吗?"默认情况下是,但如果您使用 access_decision_manager.strategy 则不是:unaminous
猜你喜欢
  • 2019-05-16
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 2012-02-03
  • 2018-04-09
  • 2020-05-28
相关资源
最近更新 更多