ASP.NET MVC 5基于用户角色自定义Bootstrap导航栏

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

我个人喜欢第二种使用区域和部分的方法都可以正常工作,但是第二种方法发现它更整洁,因此您可以更具体,更简单地