ASP.NET MVC 5 Настройка бутстрапа navbar на основе роли пользователя

Я использую встроенные методы аутентификации ASP.NET MVC 5. Я хотел бы показывать и скрывать ссылки (в меню navbar) на основе роли, в которой пользователь находится.

Кто-нибудь получил это?

Где была бы отправная точка?

Ответ 1

Просто обведите свои ссылки в:

@if (User.IsInRole("SomeRole"))
{
    ...
}

Ответ 2

Вы можете использовать MvcSiteMap для этого. У него есть функция SecurityTrimming, которая использует атрибут [Authorize] в ваших методах действий, чтобы решить, отображать или нет элемент меню.

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

В дополнение к видимости меню на основе ролей я добавил пользовательские атрибуты в MvcSiteMapNodes, чтобы определить видимость ссылок, которые были доступны для пользователей, но я не хотел показывать их в меню (например, редактировать страницы), а также добавил значки, которые позволяли мне использовать значки меню начальной загрузки, например:

<mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true">

Я немного не по теме, но я просто хотел подчеркнуть, насколько гибкой MvcSiteMap.

Ответ 3

Две вещи, которые я делаю. Либо

User.IsInRole(admin)
{link somewhere}

Или то, что я лично делаю, потому что я использую области, в которых у меня есть viewstart в области admin, который ссылается на admin shared viewmodel, а затем в общем доступе администратора, который ссылается на общедоступный вид.

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

Затем внутри общедоступного общего доступа я тогда использую (на телефоне не могу запомнить точное имя что-то вроде)
  Html.IsSectionDefined

Мне лично нравится, что второй метод, использующий области и разделы, будет работать нормально, но со вторым я нахожу его более чистым, и вы можете быть гораздо более понятным и намного проще