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

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

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

где будет отправная точка?

3 ответов


просто оберните свои ссылки в:

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

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

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

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

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

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


две вещи я делаю. Либо

User.IsInRole(admin)
{link somewhere}

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

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

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

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