2014-03-10 2 views
10

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

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

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

ответ

21

Просто обернуть ссылки в:

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

Чтобы добавить к этому, в соответствии с Microsoft, это хорошо чтобы использовать роли пользователей, которые описывают, что именно у пользователя есть разрешение. например если вы хотите иметь ссылку на навигационной панели, чтобы добавить новых пользователей @if (User.IsInRole («AddUsers»)), а не использовать общую роль, например «Admin» или что-то еще. – IanSoc

4

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

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

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

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

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

+0

Он не нахмурился, чтобы опубликовать ссылки. Чем больше ссылок, тем лучше. Это всего лишь проблема, если весь ваш ответ - это просто ссылка. Как только что-то вроде «У этого блога есть солютон» –

+0

@ChrisPratt - справедливая точка, но я просто осознаю, что если эта ссылка когда-нибудь исчезнет, ​​у меня останется справедливая часть соответствующей информации, и мой ответ не так полезен (если это когда-либо было!) – markpsmith

0

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

User.IsInRole(admin) 
{link somewhere} 

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

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

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

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

Смежные вопросы