ASP.NET MVC 5 Настройка начальной загрузки navbar на основе роли пользователя
Я использую ASP.NET MVC 5 встроенные методы аутентификации. Я хотел бы показать и скрыть ссылки (в меню navbar) на основе роли пользователя.
кто-нибудь получил это?
где будет отправная точка?
3 ответов
можно использовать 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
Мне лично нравится второй метод, используя области и разделы, оба будут работать нормально, но со вторым я нахожу его намного чище, и вы можете быть намного более конкретным и намного проще