首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >执行控制器前的自定义授权检查

执行控制器前的自定义授权检查
EN

Stack Overflow用户
提问于 2015-11-10 07:40:31
回答 2查看 792关注 0票数 0

我在路由设置中添加了一个新选项roles,用于在菜单呈现期间检查菜单项的权限。

如果我可以在执行相应的控制器之前使用授权检查选项,那就太好了。

示例:

代码语言:javascript
运行
复制
some_route:
    path: /path/
    defaults:   { _controller: MyBundle:Controller:action }
    option:
        roles: [ROLE_MANAGER, ROLE_ADMIN]

在执行控制器之前,我需要检查用户是否可以根据其角色访问控制器。

怎么可能?有什么想法吗?

更新

为什么我需要roles选项?

在项目中有4种不同的角色和多种路径。有些路由是受保护的,只对具有特定角色的用户可见。

目前,所有授权检查都是通过denyAccessUnlessGranted()方法在控制器内部执行的。

我还使用KnpMenuBundle来构建菜单。在菜单呈现过程中,我需要检查当前登录用户的每个项目的可访问性。如果用户没有对某一项的访问权限,则它将被排除在外,而用户则不会看到它。

为了检查用户是否有访问某个项的权限,我添加了前面提到的选项,其中定义了访问路由的角色。这个roles选项定义了与denyAccessUnlessGranted()中的检查完全相同的角色。我想,既然我已经有了这些角色设置,为什么不使用它来检查控制器授权,并从它们中删除多余的代码。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-10 18:50:39

我知道这不是什么答案,但你是问我的。

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

票数 1
EN

Stack Overflow用户

发布于 2015-11-10 08:07:17

基本上有两种方式

  1. Security.yml
  • { path:^/path/$,角色: ROLE_MANAGER,ROLE_ADMIN }
  1. 注释直接进入控制器 /** * @Security("has_role('ROLE_ADMIN')或has_role('ROLE_MANAGER')") */公共功能nameOfYourAction()

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33624985

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档