执行控制器之前的自定义授权检查
Custom authorization check before executing controller
我在路由设置中添加了一个新选项 roles
,用于在菜单呈现期间检查菜单项的权限。
如果我能在执行相应的控制器之前使用权限检查选项就太好了。
示例:
some_route:
path: /path/
defaults: { _controller: MyBundle:Controller:action }
option:
roles: [ROLE_MANAGER, ROLE_ADMIN]
在执行控制器本身之前,我需要根据用户的角色检查用户是否有权访问控制器。
怎么可能?有什么想法吗?
更新
为什么我需要 roles
选项?
项目中有4个不同的角色和多条路线。部分路线受到保护,仅对具有特定角色的用户可见。
目前,所有授权检查都是通过 denyAccessUnlessGranted()
方法在控制器内部执行的。
我还使用 KnpMenuBundle 来构建菜单。在菜单呈现期间,我需要检查当前登录用户的每个项目的可访问性。如果用户无权访问某个项目,则该项目将被排除并且用户看不到它。
为了检查用户是否有权访问某个项目,我添加了我提到的选项,我在其中定义了有权访问路由的角色。这个 roles
选项定义的角色与 denyAccessUnlessGranted()
中的检查完全相同。而且我认为,既然我已经有了这些角色设置,为什么不将其用于控制器授权检查并从中删除冗余代码。
基本上有两种方式
Security.yml
- { path: ^/path/$, roles: [ROLE_MANAGER, ROLE_ADMIN] }
注释直接进入控制器
/**
* @Security("has_role('ROLE_ADMIN') or has_role('ROLE_MANAGER')")
*/
public function nameOfYourAction()
这样,controller动作执行前的第一个动作就是安全检查:如果失败,controller将不会被执行。
我知道这不是一个很好的答案,但你要求它。
添加一个 kernel.controller 侦听器并检查那里的权限。
我在路由设置中添加了一个新选项 roles
,用于在菜单呈现期间检查菜单项的权限。
如果我能在执行相应的控制器之前使用权限检查选项就太好了。
示例:
some_route:
path: /path/
defaults: { _controller: MyBundle:Controller:action }
option:
roles: [ROLE_MANAGER, ROLE_ADMIN]
在执行控制器本身之前,我需要根据用户的角色检查用户是否有权访问控制器。
怎么可能?有什么想法吗?
更新
为什么我需要 roles
选项?
项目中有4个不同的角色和多条路线。部分路线受到保护,仅对具有特定角色的用户可见。
目前,所有授权检查都是通过 denyAccessUnlessGranted()
方法在控制器内部执行的。
我还使用 KnpMenuBundle 来构建菜单。在菜单呈现期间,我需要检查当前登录用户的每个项目的可访问性。如果用户无权访问某个项目,则该项目将被排除并且用户看不到它。
为了检查用户是否有权访问某个项目,我添加了我提到的选项,我在其中定义了有权访问路由的角色。这个 roles
选项定义的角色与 denyAccessUnlessGranted()
中的检查完全相同。而且我认为,既然我已经有了这些角色设置,为什么不将其用于控制器授权检查并从中删除冗余代码。
基本上有两种方式
Security.yml
- { path: ^/path/$, roles: [ROLE_MANAGER, ROLE_ADMIN] }
注释直接进入控制器
/** * @Security("has_role('ROLE_ADMIN') or has_role('ROLE_MANAGER')") */ public function nameOfYourAction()
这样,controller动作执行前的第一个动作就是安全检查:如果失败,controller将不会被执行。
我知道这不是一个很好的答案,但你要求它。
添加一个 kernel.controller 侦听器并检查那里的权限。