Как разработать две разные строки меню для веб-сайта (одну для всех пользователей, а другую для администратора) в ASP.NET webfroms?

#asp.net #html #css

#asp.net #HTML #css

Вопрос:

Я разрабатываю веб-приложение в ASP.NET. Панель меню / навигации находится в верхней части веб-сайта. Теперь я хочу создать административные задачи, и поскольку у меня достаточно места в строке меню, я добавлю новую вкладку / элемент в меню под названием Admin, который будет отображаться только администратору. Проблема сейчас в следующем: чтобы добавить этот элемент, мне нужно немного изменить стиль меню. Стиль меню размещен в отдельном CSS-файле и отличается от CSS-файла всего веб-сайта. Делая это, я изменю стиль меню для всех пользователей, и то, что я хочу, это просто показать эти изменения администратору, а не всем пользователям. Итак, как это сделать? Есть ли какой-нибудь способ сделать это?

Строка меню реализована внутри страницы Site.master. Кроме того, я использую проверку подлинности Windows, а не проверку подлинности Forms. Аутентификация в формах не требуется, поскольку веб-сайт будет использоваться только внутри компании.

Пожалуйста, предоставьте мне пример (если есть)

Ответ №1:

Используйте ASP.NET поставщик ролей, который интегрируется с некоторыми встроенными ASP.NET элементы управления, такие как Menu и TreeView.

Смотрите Рецепт: Внедрение безопасности на основе ролей с ASP.NET 2.0 с использованием аутентификации Windows и SQL Server для некоторых идей.

ASP.NET Настройка безопасности на карте сайта описывает роли и настройку безопасности.

Ответ №2:

Что вы можете сделать, так это сохранить два отдельных CSS-файла, один для меню для всех пользователей, а другой только для администраторов, и на основе входа в систему динамически загружать css-файл:

 protected void Page_Load(object sender, EventArgs e)
{
        HtmlLink cssLink = new HtmlLink();

        if(User is Admin)
            cssLink.Href = "~/styles/admin_menu.css";
        else
            cssLink.Href = "~/styles/users_menu.css";

        cssLink.Attributes.Add("rel", "stylesheet");        
        cssLink.Attributes.Add("type", "text/css");
        Header.Controls.Add(cssMasterLink);
}
  

Ответ №3:

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

Один из подходов, который я использовал, — это иметь MenuControl.ascx. Внутри этого MenuControl я бы сделал что-то вроде этого:

 <%  if (HttpContext.Current.User.IsInRole("Admin")){%>
     <li class="myclass"><a class="link" href="#Product">Admin</a>
<%}%>
  

Конечно, это подразумевает, что вы внедрили аутентификацию в формах и что вы внедрили IPrincipal, но идея одна и та же, независимо от того, как вы внедрили роли в своем приложении.

Ответ №4:

Вы могли бы создать две разные страницы, одну для администраторов и одну для всех остальных.

Ответ №5:

Попробуйте использовать WebUserControl. Одна для администратора и одна для всех пользователей затем используйте директиву «@ Reference» на вашей главной странице или masterpage, затем задайте свое условие, какой пользовательский элемент управления должен отображаться.