【问题标题】:Authorise part of a View IN ASP.NET MVC在 ASP.NET MVC 中授权视图的一部分
【发布时间】:2011-06-20 09:02:58
【问题描述】:

我目前在控制器中使用 [Authorise] 属性来限制视图仅在网站用户登录时可见。

但是如何只限制视图的一部分呢?例如。像这样……?

<% if(SomeoneIsLoggedIn) { %>
  <div id="protectedContent">...</div>
<% } %>

登录成功时调用该方法:

public static void CreateLoginCookie(User u)
{
  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(u.Id.ToString(), true, 9*60);
  string encryptedTicket = FormsAuthentication.Encrypt(ticket);
  HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddHours(9) };
  HttpContext.Current.Response.Cookies.Add(cookie);
}

(顺便说一句,这 9 个小时似乎不起作用,代码可能有缺陷,但它正在工作 - 它可以让人们登录)

提前致谢。

【问题讨论】:

    标签: asp.net-mvc model-view-controller asp.net-mvc-2 authorization


    【解决方案1】:

    您可以使用以下方法检查用户是否已登录:

    System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
    

    然后,如果用户已登录,您可以将其添加到 ViewData:

    ViewData["UserStatus"] = System.Web.HttpContext.Current.User.Identity.IsAuthenticated;
    

    然后根据您的观点,您可以这样做:

    <% if((bool)ViewData["UserStatus"]) { %>
      Content only for logged in users 
    <% } %>
    

    【讨论】:

      【解决方案2】:

      为您的 ViewModel 添加一个布尔值:

      public bool ShowProtectedSection {get; set;}
      

      然后根据您的业务规则将其填充到您的控制器中(如果您使用 ASP.net 成员资格,则可以使用角色,或者如果您使用自己的逻辑,则只需使用它来确定用户是否具有访问权限)。

      将检查添加到视图:

      <% if(Model.ShowProtectedSection) { %>
        <div id="protectedContent">...</div>
      <% } %>
      

      【讨论】:

      • 谢谢迈克尔,但是你在 ShowProtectedSection 的 get 方法中放了什么?这是我的主要问题。我不确定这个 [Authorise] 属性是如何工作的。我没有自己的逻辑。我会将 Login 方法添加到问题中。
      猜你喜欢
      • 2013-01-12
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多