首页 文章

根据ASP.NET MVC 3中的控制器和操作名称授予当前用户权限

提问于
浏览
14

我需要在ASP.NET MVC 3中创建自定义授权 . 在应用程序内部,授权在5个表中定义:用户,组,用户组,权限,grouprights . 用户可以属于多个组,每个权限也可以分配给多个组 . 为每个控制器操作分配一个RightID .

内置授权无法容纳此设置,因此我尝试创建自定义的AuthorizeAttribute . 覆盖AuthorizeCore时,我意识到我无法访问控制器名称和操作名称 .

我可以以某种方式要求路由器解析AuthorizeCore中的Request.RawUrl以获取控制器和操作名称吗?或者还有另一种方法可以做我想要的吗?

2 回答

  • 23
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var routeData = httpContext.Request.RequestContext.RouteData;
        var controller = routeData.GetRequiredString("controller");
        var action = routeData.GetRequiredString("action");
        ...
    }
    
  • 0

    您可以使用 Action Filters 来实现此目的,您可以访问所有HttpContex .

    public class MyAuthorizeAttribute : ActionFilterAttribute, IAuthorizationFilter
    {
    
        #region Implementation of IAuthorizationFilter
    
        public void OnAuthorization(AuthorizationContext filterContext)
        {
                  // ... implementation
    
                  // filterContext.Controller is the controller
                  // filterContext.RouteData is all the route data
    

相关问题