【问题标题】:How to handle authorization in the view layout如何在视图布局中处理授权
【发布时间】:2012-07-03 08:59:09
【问题描述】:

Authorize 属性可以很好地基于 Action 做一些访问控制,但假设我在布局中有一些 UI 元素应该注意输出,除非用户被授权。

我可以在 ViewBag 中设置一些布尔值,但我猜这不是一个好的解决方案。

Layout.cshtml 中的某处:

@if (ViewBag.IsAuthorized)
{
     <li>@Html.ActionLink("Index", "Admin")</li>
}

如果有更好的解决方案,请告诉我。 谢谢。

【问题讨论】:

    标签: c# asp.net-mvc-3 view acl


    【解决方案1】:

    使用WebPageRenderingBase.User 对象;假设您之前已将用户设置为 HttpContext 或 Controller(您确实应该如此)。由于您使用的是 Authorize 属性,我认为必须有一个 User - 所以希望以下内容应该有效。

    这个User 可以很容易地在 Razor 中访问:

    @User.Identity.Name
    

    会输出当前用户的名字。因此,仅在用户通过身份验证时运行的 if 块将是:

    @if(User.Identity.IsAuthenticated)
    {
       Hello
    }
    

    如果用户通过身份验证,则输出 "Hello"

    感谢下面的 James 提醒我,您可以检查 IsAuthenticated 关闭 User 对象 - 我一开始找不到它 - 但后来想起它在 Identity 上!

    【讨论】:

    • 你遗漏了哪些细节?
    • @AndrasZoltan 删除了我的评论,因为我看到你更新了。
    【解决方案2】:

    您可以创建一个helper method 并从布局中调用它。

    @Helper.IsAuthorize()
    

    【讨论】:

      【解决方案3】:

      您可以调用一个函数来验证用户是否已通过身份验证:

      助手:

      public bool checkUser(string user)
      {
      //User is allowed?
      return true/false;
      }
      

      布局:

      @if (checkUser(User.Identity.Name)
      {
           <li>@Html.ActionLink("Index", "Admin")</li>
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-10-13
        • 1970-01-01
        • 2016-05-30
        • 1970-01-01
        • 2011-08-04
        • 2012-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多