Авторизовать часть View IN ASP.NET MVC - PullRequest
0 голосов
/ 03 февраля 2011

В настоящее время я использую атрибут [Authorize] в Controllers, чтобы ограничить представления, чтобы они были видны только в том случае, если пользователь веб-сайта вошел в систему.

Но как ограничить только часть представления?например.Примерно так ...?

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

2 голосов
/ 03 февраля 2011

Вы можете проверить, вошел ли пользователь, используя это:

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 
<% } %>
0 голосов
/ 03 февраля 2011

Добавьте bool к вашей ViewModel:

public bool ShowProtectedSection {get; set;}

затем заполните это в вашем контроллере в соответствии с вашими бизнес-правилами (если вы используете членство в ASP.net, вы можете использовать роли или если вы используете свою собственную логику, просто используйте ее, чтобы узнать, есть ли у пользователя доступ).

Добавить чек к просмотру:

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