授权View IN ASP.NET MVC的一部分

时间:2011-02-03 00:40:09

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

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

但是,您如何仅限制视图的一部分?例如。像这样......?

<% 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小时似乎不起作用,代码可能有缺陷,但它正在运行 - 它让人们登录)

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

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 
<% } %>

答案 1 :(得分:0)

在您的ViewModel中添加一个bool:

public bool ShowProtectedSection {get; set;}

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

将支票添加到视图:

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