【问题标题】:proper authorization redirect in MVC 4 AuthorizeAttribute - hiding unauthorized menu tabsMVC 4 AuthorizeAttribute 中的正确授权重定向 - 隐藏未经授权的菜单选项卡
【发布时间】:2013-12-22 19:45:24
【问题描述】:

我非常接近把这件事做好,但仍然缺少一件事。

在一般情况下,当授权失败时,会发生以下情况:

filterContext.Result = new HttpUnauthorizedResult();

这会自动防止未经授权的 MVC 菜单选项卡呈现(因为 AuthorizeAttribute 为指向底层授权资源的每个选项卡调用)。

这按预期工作。但是,我想做这样的事情:

protected override void HandleUnauthorizedRequest(AuthorizationContext ctx) {
            ctx.Result = new ViewResult{ ViewName = "Unauthorized"};
            ctx.HttpContext.Response.StatusCode = 401;

这显示了共享的未经授权的视图(同时保持 url 原始,以便清楚什么是未经授权的)

同样有效,接受隐藏未经授权的菜单选项卡的部分。

据我所知,查看source for HttpUnhandledResult 它所做的只是将 StatusCode 设置为 401,在将我的分片视图设置为结果之后我也在这样做。

然而在我的实现中,未经授权的标签仍然显示,但我可以在日志中看到它们的授权失败..

我正在使用剑道菜单 (telerik)..

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 telerik kendo-ui authorization


    【解决方案1】:

    我最终执行了不同的操作,具体取决于当前路径或菜单项是否请求授权。我区分这一点的方式(在 OnAuthorization 中)是:

    // are we authorizing current path, or a menu tab?????
    _authorizingCurrentPath = filterContext.HttpContext.Request.PhysicalPath.Contains(action);
    

    在 HandleUnauthorizedRequest 中:

    if (_authorizingCurrentPath)
        ctx.Result = new ViewResult { ViewName = "Unauthorized" };
    else
        ctx.Result = new HttpUnauthorizedResult();
    

    这样我看不到未经授权的菜单项,但如果有人仍然直接去那里,则会在保留原始 URL 的同时显示“未经授权”错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-23
      • 1970-01-01
      • 2010-11-01
      • 2018-06-15
      • 2020-04-25
      • 1970-01-01
      • 2021-07-22
      • 1970-01-01
      相关资源
      最近更新 更多