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

时间:2011-04-08 11:59:04

标签: asp.net-mvc asp.net-mvc-3 authorization

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

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

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

2 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:0)

您可以使用操作过滤器来实现此目的,您可以访问所有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
相关问题