【问题标题】:Authorization Redirect for Partial Views and Views部分视图和视图的授权重定向
【发布时间】:2017-12-20 16:07:39
【问题描述】:

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

[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" };
        }
    }

这对几乎所有东西都很有效,除了部分视图

当我将授权属性放在返回部分的操作上时,会返回 Forbidden 视图,正如预期的那样,但它具有完整的布局。完整的布局包含页面上的所有其他元素,例如菜单,因此它看起来像是进入另一个版本的网站的 iframe。

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

还是我这样做的方式不对?

【问题讨论】:

  • 您是否尝试过检查 context.Controller.ControllerContext.IsChildAction 并返回一个 PartialViewResult 如果它是真的?
  • @Fran 不,我没有。这听起来正是我需要的。控制器如何确定 Child Action 是什么?
  • 动作需要带有 [ChildActionOnly] 属性的注释。
  • @Fran 想提出解决方案?那行得通。

标签: c# asp.net-mvc authorization


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多