检查当前用户是否有权访问指定的MVC路径

时间:2012-07-20 14:43:32

标签: asp.net asp.net-mvc asp.net-mvc-routing

我需要扩展asp:Menu以支持链接到MVC路由(我的项目混合了MVC和非MVC页面)。我的菜单是使用自定义类生成的,该类确定是否应该根据用户对其所引用文件的权限来显示节点。

使用AuthorizeAttribute限制MVC页面。避免嘲笑(如果可能的话)我想

  1. 确定路径是指MVC页面还是标准页面
  2. 如果是MVC,请确定用户是否有权访问它
  3. 这是菜单生成类中的方法签名:

    Private Function CanAccessPage(path As String) As Boolean
    

1 个答案:

答案 0 :(得分:0)

这是我用于此的算法,

  1. 基于@SLaks回答here,我能够确定路径是否指向MVC路线。
  2. 如果是MVC,我抓住了控制器类型(这需要知道我的控制器所在的命名空间)
  3. 通过controllerType.GetMethods(actionMethodName)获取操作方法(如果您有多个具有相同名称的方法,则必须选择链接引用的方法。可能是具有HttpGet属性的方法)。
  4. 使用actionMethodInfo.GetCustomAttributes(GetType(AuthorizationAttribute),False)获取指定操作的所有授权过滤器的集合
  5. 使用我在步骤1中为每个属性构建的伪上下文信息调用OnAuthorization。
  6. 检查TypeOf filterContext.Result是否为HttpUnauthorizedResult并相应返回