0

roles在路由设置中添加了一个新选项,用于在菜单呈现期间检查菜单项的权限。
如果我可以在执行相应的控制器之前使用该选项进行授权检查,那就太好了。

例子:

some_route:
    path: /path/
    defaults:   { _controller: MyBundle:Controller:action }
    option:
        roles: [ROLE_MANAGER, ROLE_ADMIN]

在执行控制器本身之前,我需要检查用户是否可以根据他的角色访问控制器。
怎么可能?有任何想法吗?

更新
为什么我需要这个roles选项?
项目中有4个不同的角色和许多路线。某些路由受保护并且仅对具有特定角色的用户可见。
目前所有的授权检查都是在控制器内部通过denyAccessUnlessGranted()方法执行的。
我还使用KnpMenuBundle来构建菜单。在菜单渲染期间,我需要检查当前登录用户的每个项目的可访问性。如果用户无权访问某个项目,则该项目将被排除并且用户看不到它。
为了检查用户是否可以访问某个项目,我添加了我提到的选项,我在其中定义了可以访问路由的角色。此roles选项定义的角色与签入中的角色完全相同denyAccessUnlessGranted(). 而且我认为既然我已经有了这些角色设置,为什么不将它用于控制器授权检查并从中删除冗余代码。

4

2 回答 2

3

基本上有两种方式

  1. 安全.yml

    - { path: ^/path/$, roles: [ROLE_MANAGER, ROLE_ADMIN] }
    
  2. 注释直接进入控制器

    /**
     * @Security("has_role('ROLE_ADMIN') or has_role('ROLE_MANAGER')")
     */
    public function nameOfYourAction()
    

这样,控制器执行动作之前的第一个动作就是安全检查:如果失败,控制器将不会被执行。

于 2015-11-10T08:07:17.043 回答
1

我知道这不是一个很大的答案,但你要求它。

添加一个kernel.controller监听器并检查那里的权限。

于 2015-11-10T18:50:39.563 回答