【问题标题】:Check if curent user has access to specified MVC path检查当前用户是否有权访问指定的 MVC 路径
【发布时间】:2012-07-23 18:57:26
【问题描述】:
我需要扩展 asp:Menu 以支持链接到 MVC 路由(我的项目混合了 MVC 和非 MVC 页面)。我的菜单是使用自定义类生成的,该类根据用户对其引用的文件的权限确定是否应向用户显示节点。
MVC 页面使用 AuthorizeAttribute 进行限制。避免嘲笑(如果可能的话)我想
- 确定路径是指 MVC 页面还是标准页面
- 如果是 MVC,判断用户是否有权限访问它
这是我在菜单生成类中的方法签名:
Private Function CanAccessPage(path As String) As Boolean
【问题讨论】:
标签:
asp.net
asp.net-mvc
asp.net-mvc-routing
【解决方案1】:
这是我用于此的算法,
- 根据@SLaks 回答here,我能够确定路径是否引用了 MVC 路由。
- 如果是 MVC,我会获取控制器类型(这需要知道我的控制器所在的命名空间)
- 通过 controllerType.GetMethods(actionMethodName) 获取操作方法(如果您有多个同名方法,则必须选择链接所指的那个。可能是具有 HttpGet 属性的那个)。
- 使用 actionMethodInfo.GetCustomAttributes(GetType(AuthorizationAttribute), False) 获取指定操作的所有授权过滤器的集合
- 使用我在步骤 1 中为每个属性构建的虚假上下文信息调用 OnAuthorization。
- 检查 TypeOf filterContext.Result 是否为 HttpUnauthorizedResult 并相应返回