Вы можете использовать MvcSiteMap для этого. Он имеет функцию SecurityTrimming, которая использует атрибут [Authorize] для ваших действий, чтобы решить, показывать или не отображать элемент меню.
Я знаю, что он нахмурился, чтобы опубликовать ссылки в ответах, но я нашел this blog post очень полезным.
В дополнение к видимости меню на основе ролей я добавил пользовательские атрибуты в MvcSiteMapNodes, чтобы определить видимость ссылок, которые были доступны для пользователей, но я не хотел показывать их в меню (например, редактировать страницы), а также добавлены иконки атрибуты, которые позволили мне использовать иконки меню начальной загрузки, например:
<mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true">
Я пошел немного не по теме, но я просто хотел подчеркнуть, насколько гибким MvcSiteMap есть.
Чтобы добавить к этому, в соответствии с Microsoft, это хорошо чтобы использовать роли пользователей, которые описывают, что именно у пользователя есть разрешение. например если вы хотите иметь ссылку на навигационной панели, чтобы добавить новых пользователей @if (User.IsInRole («AddUsers»)), а не использовать общую роль, например «Admin» или что-то еще. – IanSoc