我有一个应用程序需要授权才能访问所有控制器/操作。除了登录和错误控制器/操作。如果我所有的.Net控制器/操作都需要授权Attr,为什么没有一个属性只能使用那些不需要的?
在这种情况下,在一次防守方式工作是更好地保持默认限制对所有控制器/操作(无授权属性)和一个自定义选择属性只有那些谁不知道。
你们这样做过吗?
我有一个MVC过滤如果登录的用户有机会获得他们的所有行动之前执行:
public class ValidatePermissionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
bool isAuthorized = false;
//Logic that verify if logged user have permission to access the requested Controller/Action
...
//Redirect to a page Error if Logged User don't have Authorization
if (!isAuthorized)
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "Erro");
redirectTargetDictionary.Add("controller", "Index");
context.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
}
我想做到这一点的最好办法。我可以创建一个空白定制属性及放在控制器不需要授权,并检查它在我过滤:
public class ValidatePermissionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
bool isAuthorized = false;
var DoNotRequiresAuthorizationAttributes = context.ActionDescriptor.GetCustomAttributes(typeof(DoNotRequiresAuthorizationAttribute), false);
if (DoNotRequiresAuthorizationAttributes.Length > 0)
isAuthorized = true;
...
//Redirect to a page Error if Logged User don't have Authorization
if (!isAuthorized)
{
RouteValueDictionary redirectTargetDictionary = new RouteValueDictionary();
redirectTargetDictionary.Add("action", "Erro");
redirectTargetDictionary.Add("controller", "Index");
context.Result = new RedirectToRouteResult(redirectTargetDictionary);
}
}
}
什么各位高手你们认为?
更新:
思考更好,我可以在Global.asax中取代我筛选有自定义授权属性并注册在所有控制器ACT /动作:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new MyCustomAuthorizeAttribute());
}
更新2:
而是创建一个空白定制属性及放在控制器不需要授权,我通过我的自定义授权参数的控制器不需要授权(在Global.asax中):
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new ValidatePermissionAttribute("Login", "Erro"));
}
我授权属性:
更新3:
条件筛选器是要走的路。
我喜欢这个方法...... – David
@David,全局和条件过滤器是标准的方法。 :) – bzlm
不,srsly ?! :-X – David