【发布时间】:2014-03-10 16:15:43
【问题描述】:
我正在使用 ASP.NET MVC 5 内置的身份验证方法。我想根据用户的角色显示和隐藏链接(在菜单导航栏中)。
有人做到了吗?
从哪里开始?
【问题讨论】:
标签: asp.net-mvc twitter-bootstrap authentication
我正在使用 ASP.NET MVC 5 内置的身份验证方法。我想根据用户的角色显示和隐藏链接(在菜单导航栏中)。
有人做到了吗?
从哪里开始?
【问题讨论】:
标签: asp.net-mvc twitter-bootstrap authentication
只需将您的链接包装在:
@if (User.IsInRole("SomeRole"))
{
...
}
【讨论】:
您可以为此使用MvcSiteMap。它有一个名为 SecurityTrimming 的功能,它使用您的操作方法上的 [Authorize] 属性来决定是否显示菜单项。
我知道在答案中发布链接是不受欢迎的,但我发现this blog post 非常有用。
除了基于角色的菜单可见性之外,我还向 MvcSiteMapNodes 添加了自定义属性,以确定用户可以访问但我不想在菜单中显示的链接的可见性(例如,编辑页面),我还添加了允许我使用引导菜单图标的图标属性,例如:
<mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true">
我有点跑题了,但我只是想强调 MvcSiteMap 的灵活性。
【讨论】:
我做两件事。要么
User.IsInRole(admin)
{link somewhere}
或者我个人所做的是因为我使用了区域,我在区域管理中有一个 viewstart,它链接到管理共享视图模型,然后在管理共享视图中链接到公共视图。
在管理员共享视图中。我设置了一个部分。在本节中,我定义了额外的导航细节,该特定角色将看到什么并将它们添加到列表标签中
然后我在公共共享视图中使用(在手机上不记得确切的名称之类的)
Html.IsSectionDefined
我个人喜欢使用区域和部分的第二种方法都可以正常工作,但使用第二种方法我发现它更干净,你可以更具体和更简单
【讨论】: