Asp.net mvc 根据ASP.NET MVC 3中的控制器和操作名称授权当前用户
我需要在ASP.NET MVC 3中创建自定义授权。在应用程序内部,授权在5个表中定义:用户、组、用户组、权限、组权限。一个用户可以属于多个组,并且每个权限也可以分配给多个组。每个控制器操作都分配了一个RightID 内置授权无法适应此设置,因此我尝试创建一个自定义的authorized属性。当重写AuthorizeCore时,我意识到我无权访问控制器名称和操作名称Asp.net mvc 根据ASP.NET MVC 3中的控制器和操作名称授权当前用户,asp.net-mvc,asp.net-mvc-3,authorization,Asp.net Mvc,Asp.net Mvc 3,Authorization,我需要在ASP.NET MVC 3中创建自定义授权。在应用程序内部,授权在5个表中定义:用户、组、用户组、权限、组权限。一个用户可以属于多个组,并且每个权限也可以分配给多个组。每个控制器操作都分配了一个RightID 内置授权无法适应此设置,因此我尝试创建一个自定义的authorized属性。当重写AuthorizeCore时,我意识到我无权访问控制器名称和操作名称 我是否可以要求路由器解析AuthorizeCore中的Request.RawUrl以获取控制器和操作名称?或者是否有其他方法来实现
我是否可以要求路由器解析AuthorizeCore中的Request.RawUrl以获取控制器和操作名称?或者是否有其他方法来实现我的要求?您可以使用操作过滤器来实现这一点,您可以访问所有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
我在某个地方读到,由于输出缓存存在一些问题,我不应该实现自己的授权过滤器。不确定这在MVC 3.0中是否仍然是一个问题。授权可以在请求和用户之间缓存/共享,因此这是不安全的。改为使用AuthorizeCore。这样我就可以访问控制器和操作名称:)
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var routeData = httpContext.Request.RequestContext.RouteData;
var controller = routeData.GetRequiredString("controller");
var action = routeData.GetRequiredString("action");
...
}