#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, затем задайте свое условие, какой пользовательский элемент управления должен отображаться.