我正在使用内置身份验证方法的ASP.NET MVC 5。我想根据用户所在的角色显示和隐藏链接(在菜单导航栏中)。
有人有过这个吗?
哪里是一个起点?
答案 0 :(得分:23)
将链接包装在:
@if (User.IsInRole("SomeRole"))
{
...
}
答案 1 :(得分:4)
您可以使用MvcSiteMap。它有一个名为SecurityTrimming的功能,它使用动作方法的[Authorize]属性来决定是否显示菜单项。
我知道在答案中发布链接是不赞成的,但我发现this blog post非常有用。
除了基于角色的菜单可见性之外,我还向MvcSiteMapNodes添加了自定义属性,以确定用户可以访问的链接的可见性,但我不想在菜单中显示(例如编辑页面),我还添加了图标属性允许我使用引导菜单图标,例如:
<mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true">
我在那里偏离了主题,但我只是想强调MvcSiteMap的灵活性。
答案 2 :(得分:0)
我做的两件事。任
User.IsInRole(admin)
{link somewhere}
或者我个人所做的是因为我在区域管理中使用了我有一个viewstart的区域,这些区域链接到admin共享viewmodel,然后在admin共享视图中链接到公共视图。
在admin共享视图中。我设置了一个部分。在本节中,我定义了额外的导航详细信息,特定角色将看到什么,并将它们添加到列表标记
中然后在公共共享视图中我然后使用(在电话上不能记住确切名称) Html.IsSectionDefined
我个人喜欢使用区域和部分的第二种方法都可以正常工作但第二种方法我发现它更清洁,你可以更加具体和简单