ASP.NET MVC 5 Customise Bootstrap navbar based on User Role
我正在使用内置的身份验证方法中的ASP.NET MVC 5。我想根据用户所处的角色来显示和隐藏链接(在导航栏菜单中)。
有人做到了吗?
起点是什么?
只需将链接package在:
1 2 3 4 | @if (User.IsInRole("SomeRole")) { ... } |
您可以为此使用MvcSiteMap。它具有一个称为SecurityTrimming的功能,该功能在您的操作方法上使用[Authorize]属性来决定是否显示菜单项。
我不愿意在答案中发布链接,但我发现此博客文章非常有用。
除了基于角色的菜单可见性之外,我还在MvcSiteMapNodes中添加了自定义属性,以确定用户可以访问但我不想在菜单中显示的链接的可见性(例如"编辑"页面),而且添加了允许我使用引导菜单图标的图标属性,例如:
1 | <mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true"> |
我在那里有点偏离主题,但我只是想强调一下MvcSiteMap的灵活性。
我做了两件事。
1 2 | User.IsInRole(admin) {link somewhere} |
或者我个人所做的是,因为我使用区域,所以我在区域管理中有一个viewstart,它链接到管理共享视图模型,然后在管理共享视图中链接到公共视图。
在管理员共享视图中。我设置了一个部分。在本节中,我定义了额外的导航详细信息,该特定角色将看到什么,并将其添加到列表标记中
然后在我使用的公共共享视图中使用(在电话上,我不记得类似的确切名称)
Html.IsSectionDefined
我个人喜欢第二种使用区域和部分的方法都可以正常工作,但是第二种方法发现它更整洁,因此您可以更具体,更简单地