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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部分视图和视图的授权重定向相关的知识,希望对你有一定的参考价值。

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

[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到另一个版本的网站。

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

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

答案

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

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

以上是关于部分视图和视图的授权重定向的主要内容,如果未能解决你的问题,请参考以下文章

会话到期时的授权重定向不适用于提交 JSF 表单,页面保持不变

Linkedin OAuth 2.0 重定向 URL 不能包含片段标识符 (#)

在哪里输入 Facebook 登录授权重定向 URI?

如何在 ViewPager 中从 Activity 移动到 Fragment?未找到片段 ID 的视图

当片段视图加载是异步任务的一部分时,如何在片段加载之前显示进度条?

Android 动画布局和视图