我写了一个自定义的授权过滤器:
public class MyAuthenticationAttribute : FilterAttribute, IAuthorizationFilter{
// Do the authorization
if (!isAuthenticated)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
这个过滤器有各种条件,如果用户没有被授权,最终将结果设置为Unauthorized
,如果用户被授权,则什么也不做。
它在 SPA 应用程序中使用,我的几乎所有方法都是从网格中调用的。在这些网格中,我有自定义错误处理程序,如果出现问题,它将显示友好的通知。所有错误都添加到ModelState
.
现在,我想管理未经授权的行为并ModelState
在用户无权执行(例如删除)时进行更改。
请指导我应该如何实现它以及我需要覆盖哪些方法。
更新
我可以用这条线改变模型状态:
filterContext.Controller.ViewData.ModelState.AddModelError("", "GO AWAY!");
但它不会向用户返回任何内容。我已经尝试在挑战方法中使用IAuthenticationFilter
和添加ModelState
错误,但它也没有奏效。
如果我可以返回一些Json
数据,我想它会正常工作。
我需要以某种方式获得此操作方法的类似行为:
public ActionResult Delete([DataSourceRequest] DataSourceRequest request, object model)
{
ModelState.AddModelError("", "error");
return Json(new[] { model}.ToDataSourceResult(request, ModelState));
}
可能吗?您对实施此授权和返回Json
数据有什么建议吗?