我在路由设置中添加了一个新选项roles
,用于在菜单呈现期间检查菜单项的权限。
如果我可以在执行相应的控制器之前使用授权检查选项,那就太好了。
示例:
some_route:
path: /path/
defaults: { _controller: MyBundle:Controller:action }
option:
roles: [ROLE_MANAGER, ROLE_ADMIN]
在执行控制器之前,我需要检查用户是否可以根据其角色访问控制器。
怎么可能?有什么想法吗?
更新
为什么我需要roles
选项?
在项目中有4种不同的角色和多种路径。有些路由是受保护的,只对具有特定角色的用户可见。
目前,所有授权检查都是通过denyAccessUnlessGranted()
方法在控制器内部执行的。
我还使用KnpMenuBundle来构建菜单。在菜单呈现过程中,我需要检查当前登录用户的每个项目的可访问性。如果用户没有对某一项的访问权限,则它将被排除在外,而用户则不会看到它。
为了检查用户是否有访问某个项的权限,我添加了前面提到的选项,其中定义了访问路由的角色。这个roles
选项定义了与denyAccessUnlessGranted()
中的检查完全相同的角色。我想,既然我已经有了这些角色设置,为什么不使用它来检查控制器授权,并从它们中删除多余的代码。
发布于 2015-11-10 18:50:39
我知道这不是什么答案,但你是问我的。
添加一个kernel.controller侦听器并检查那里的权限。
发布于 2015-11-10 08:07:17
基本上有两种方式
这样,在执行控制器操作之前所做的第一个操作就是安全性检查:如果失败,控制器将不会被执行。
https://stackoverflow.com/questions/33624985
复制相似问题