我roles
在路由设置中添加了一个新选项,用于在菜单呈现期间检查菜单项的权限。
如果我可以在执行相应的控制器之前使用该选项进行授权检查,那就太好了。
例子:
some_route:
path: /path/
defaults: { _controller: MyBundle:Controller:action }
option:
roles: [ROLE_MANAGER, ROLE_ADMIN]
在执行控制器本身之前,我需要检查用户是否可以根据他的角色访问控制器。
怎么可能?有任何想法吗?
更新
为什么我需要这个roles
选项?
项目中有4个不同的角色和许多路线。某些路由受保护并且仅对具有特定角色的用户可见。
目前所有的授权检查都是在控制器内部通过denyAccessUnlessGranted()
方法执行的。
我还使用KnpMenuBundle来构建菜单。在菜单渲染期间,我需要检查当前登录用户的每个项目的可访问性。如果用户无权访问某个项目,则该项目将被排除并且用户看不到它。
为了检查用户是否可以访问某个项目,我添加了我提到的选项,我在其中定义了可以访问路由的角色。此roles
选项定义的角色与签入中的角色完全相同denyAccessUnlessGranted()
. 而且我认为既然我已经有了这些角色设置,为什么不将它用于控制器授权检查并从中删除冗余代码。