Mic*_*ins 9 c# asp.net-mvc attributes authorization
我有一个似乎在表面上工作的自定义AuthorizationAttribute.当没有正确权限的用户通过浏览器请求操作时,会显示相应的消息.
我开始将此属性应用于HttpPost执行删除等操作.即使响应正确,操作的主体仍会执行(在这种情况下,项目将被删除).
我希望能够做的是完全阻止action方法在授权属性失败时执行任何操作.这是AuthorizationAttributes的用途,还是我应该以另一种方式查看?
更新:
public override void OnAuthorization(AuthorizationContext filterContext)
{
Check.Require(filterContext != null);
if (service.HasPermission(requiredPermission))
return;
filterContext.HttpContext.Response.StatusCode = 404;
filterContext.HttpContext.Response.StatusDescription = "File not found";
}
Run Code Online (Sandbox Code Playgroud)
控制器操作正在按如下方式进行装饰:
[HttpPost, RequiresPermission(Permissions.CanDeleteContentItem)]
public JsonResult Delete(Guid id)
Run Code Online (Sandbox Code Playgroud)
您需要做的是更改操作返回的结果,而不是仅更改标头值.
public override void OnAuthorization(AuthorizationContext filterContext)
{
Check.Require(filterContext != null);
if (service.HasPermission(requiredPermission))
return;
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Home" }, {"action", "NoPermission" } })
}
Run Code Online (Sandbox Code Playgroud)
如果要返回正确的HTTP响应,也可以执行以下操作:
filterContext.Result = new HttpUnauthorizedResult();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1542 次 |
| 最近记录: |