На моей главной странице хочу выводить HTML, только если пользователь является администратором - PullRequest
3 голосов
/ 28 января 2010

Мой объект пользователя имеет свойство: IsAdministrator

Теперь я хочу вставлять HTML на каждую страницу, так что на моей главной странице, только если пользователь является администратором.

Каков наилучший способ сделать это?

Я думал о создании пользовательского элемента управления, а затем о вызове RenderPartial.

Но мне нужно получить доступ к объекту Request, чтобы проверить, прошел ли пользователь аутентификацию, и, если это так, получить объект пользователя из кэша и затем проверить свойство IsAdminstrator.

Помощь

Ответы [ 4 ]

0 голосов
/ 29 января 2010

Контроллер:

public class HomeController : BaseController
{
  public ActionResult Index()
  {
    return View();
  }
}

BaseController:

public class BaseController : Controller
{
  public override void OnActionExecuted(ActionExecutedContext context)
  {
    base.OnActionExecuted(context);

    bool isAdministrator = context.HttpContext.Request.IsAuthenticated && context.HttpContext.User.IsInRole("Administrator");
    context.Controller.ViewData.Add("IsAdministrator", isAdministrator);
  }
}

Главная страница:

<%
  bool isAdministrator = bool.Parse(ViewData["IsAdministrator"].ToString());
  if(isAdministrator) {
    Html.RenderPartial("Users/UserControl");
} %>

~ / Views / Shared / Пользователи / UserControl.ascx

Доступ к текущему администратору здесь с помощью <%= Page.User %>.

0 голосов
/ 28 января 2010

Попробуйте добавить элемент управления в интерфейс и поместить контент, который вы хотите отобразить внутри него.

например:

<asp:Placeholder ID="myPlaceholder" runat="server" Visible="">
   .... HTML for Admins
</asp:Placeholder>

Затем на странице загрузки в коде сделать что-то вроде этого -

    if(user.IsAdministrator)
       myPlacholder.Visible = true;
   else
       myPlaceholder.Visible = false;
0 голосов
/ 28 января 2010

Я знаю, что на это есть ответ, и не хочу идти, но у меня есть такая ситуация, когда при входе в систему я не хочу показывать логин на моей главной странице.

Я скачал фьючерсный MVC и реализовал RenderAction, это позволяет мне выполнять действие, которое проверяет вход в систему и отображает представление входа в систему или пользовательское представление.

просто тоже

0 голосов
/ 28 января 2010
  1. Вы создаете базовую пользовательскую модель со свойством IsAdministrator.
  2. Вы перегружаете функцию OnActionExecuted в базовом контроллере, от которого наследуется другой контроллер. Перегрузка, которая установит IsAdministrator в функцию запроса.
  3. Для каждого результата действия вы передаете пользовательскую модель просмотра, наследующую базовую пользовательскую модель 1)
  4. Вы создаете частичное представление, которое будет передаваться в мастере, которое принимает базовую пользовательскую модель в качестве модели
  5. 1010 * наслаждаться *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...