【发布时间】:2015-11-10 07:40:31
【问题描述】:
我在路由设置中添加了一个新选项 roles,用于在菜单呈现期间检查菜单项的权限。
如果我可以在执行相应的控制器之前使用该选项进行授权检查,那就太好了。
示例:
some_route:
path: /path/
defaults: { _controller: MyBundle:Controller:action }
option:
roles: [ROLE_MANAGER, ROLE_ADMIN]
在执行控制器本身之前,我需要检查用户是否可以根据他的角色访问控制器。
怎么可能?有什么想法吗?
更新
为什么我需要roles 选项?
项目中有4个不同的角色和许多路线。某些路由受到保护,仅对具有特定角色的用户可见。
目前,所有授权检查都通过denyAccessUnlessGranted() 方法在控制器内部执行。
我还使用KnpMenuBundle 构建菜单。在菜单渲染期间,我需要检查当前登录用户的每个项目的可访问性。如果用户无权访问某个项目,则该项目将被排除并且用户看不到它。
为了检查用户是否可以访问某个项目,我添加了我提到的选项,我在其中定义了可以访问路由的角色。这个roles 选项定义的角色与denyAccessUnlessGranted() 中的检查完全相同。而且我认为既然我已经有了这些角色设置,为什么不将其用于控制器授权检查并从中删除冗余代码。
【问题讨论】:
-
你能解释一下你为什么要这样做吗?
-
@Frankbeen,我在更新部分添加了一些解释。希望您能理解我,如果不理解,请随时询问详细信息 =)
-
添加 kernel.controller 监听器并检查那里的权限:symfony.com/doc/current/reference/events.html#kernel-controller
-
@Cerad 谢谢,这就是我想要的!您能否添加一个新答案并复制您的评论以便我接受。
标签: symfony authorization symfony-routing