【问题标题】:User roles in route settings路由设置中的用户角色
【发布时间】:2015-06-19 14:10:54
【问题描述】:

要根据用户的角色检查用户是否有权访问控制器,我们通常在控制器顶部执行以下操作:

$this->denyAccessUnlessGranted('ROLE_ADMIN');

或使用注释:

/**
* @Security("has_role('ROLE_ADMIN')")
*/

并且所有受保护的控制器都有这样的检查。

是否可以将此检查放入路线设置中,例如。 G。这种方式或类似的方式:

protected_route:
  path: /top_secret
  defaults: { _controller: '...', roles: [ROLE_ADMIN] }

?

【问题讨论】:

  • 我看不出这两种方式的区别..

标签: security symfony controller routing


【解决方案1】:

是的,你应该看看这个页面:

http://symfony.com/doc/current/book/security.html#securing-url-patterns-access-control

# app/config/security.yml
security:
    # ...
    firewalls:
        # ...

    access_control:
        # require ROLE_ADMIN for /admin*
        - { path: ^/admin, roles: ROLE_ADMIN }

【讨论】:

  • 相当不错的变体,但 IMO 不太方便,因为路线及其安全设置存储在不同的位置。我想知道我们可以在路由中设置角色设置。
  • 此外,我们必须在 security.yml 中使用模式而不是路由名称。
  • 我不知道拆分路由和安全性的原因,但据我所知这是标准方式。我通常会尝试为主要角色拆分路由,例如 /admin 用于需要 ADMIN 角色的所有页面,然后在控制器中使用一些进一步(但很少)检查。
  • @basilup:Dric512 是对的。这是 symfonic 的做法 ;)
  • 好的,谢谢,看来我别无选择 =) 但 IMO 很奇怪 - 我可以放置 \@Route 参数来设置路由以及 \@Security 参数来设置注释中的角色,但在路由器设置中我只能设置路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2020-04-04
  • 2012-06-18
  • 2015-01-30
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
相关资源
最近更新 更多