部分视图和视图的授权重定向

时间:2017-12-20 16:07:39

标签: c# asp.net-mvc authorization

我有一个自定义授权标头,在允许用户调用控制器操作之前检查当前用户是否具有特定权限。

[HasPermission(Permission.ViewPage]
public ActionResult Index()
{
   return View();
}

HasPermission类继承自AuthorizeAttribute并覆盖OnAuthorization,如下所示:

 public override void OnAuthorization(AuthorizationContext context)
    {
        if (!Permissions.IsUserInPermission(Permission))
        {
            context.Result = new ViewResult{ ViewName = "Forbidden" };
        }
    }

这几乎适用于所有事情,除部分视图

当我将authorization属性放在返回partial的操作上时,将按预期返回Forbidden视图,但它具有完整的布局。完整布局包含页面上的所有其他元素,如菜单,因此它看起来像iframe到另一个版本的网站。

当授权失败时,是否有办法在返回部分的控制器操作上返回部分视图?

或者我只是以错误的方式做这件事?

1 个答案:

答案 0 :(得分:1)

将正在返回PartialViewResult的操作标记为[ChildActionOnly],然后可以在过滤器OnAuthorization方法中检查context.Controller.ControllerContext.IsChildAction属性

        if (context.Controller.ControllerContext.IsChildAction)
        {
            context.Result = new PartialViewResult();
        }
        else
        {
            context.Result = new ViewResult();
        }