【问题标题】:ASP.NET MVC 5 Customise Bootstrap navbar based on User RoleASP.NET MVC 5 基于用户角色自定义引导导航栏
【发布时间】:2014-03-10 16:15:43
【问题描述】:

我正在使用 ASP.NET MVC 5 内置的身份验证方法。我想根据用户的角色显示和隐藏链接(在菜单导航栏中)。

有人做到了吗?

从哪里开始?

【问题讨论】:

    标签: asp.net-mvc twitter-bootstrap authentication


    【解决方案1】:

    只需将您的链接包装在:

    @if (User.IsInRole("SomeRole"))
    {
        ...
    }
    

    【讨论】:

    • 补充一点,根据微软的说法,使用描述用户有权做什么的用户角色是一种很好的做法。例如如果您想在导航栏中添加一个链接以添加新用户 @if(User.IsInRole("AddUsers")) 而不是使用“Admin”之类的通用角色。
    • @IanSoc:这实际上是角色。像“Admin”这样的东西是一个group。问题在于,微软长期以来一直将两者视为可互换的,尤其是在 Windows Auth 的上下文中,您的角色实际上是 AD 组。但是,“管理员”作为一个角色仍然可以被接受,作为一种简单地说“拥有所有角色”的方式,而不是必须单独添加每个可能的角色。
    【解决方案2】:

    您可以为此使用MvcSiteMap。它有一个名为 SecurityTrimming 的功能,它使用您的操作方法上的 [Authorize] 属性来决定是否显示菜单项。

    我知道在答案中发布链接是不受欢迎的,但我发现this blog post 非常有用。

    除了基于角色的菜单可见性之外,我还向 MvcSiteMapNodes 添加了自定义属性,以确定用户可以访问但我不想在菜单中显示的链接的可见性(例如,编辑页面),我还添加了允许我使用引导菜单图标的图标属性,例如:

    <mvcSiteMapNode title="Till" controller="Home" action="Index" area="Till" iconClass="icon-home" visibility="true">
    

    我有点跑题了,但我只是想强调 MvcSiteMap 的灵活性。

    【讨论】:

    • 张贴链接是不受欢迎的。链接越多越好。如果您的整个答案只是一个链接,这只是一个问题。就像“这篇博文有一个解决方案”之类的内容
    • @ChrisPratt - 公平点,但我只是意识到,如果该链接永远消失,那么相当多的相关信息就会消失,而且我的答案不是那么有用(如果曾经有用的话! )
    【解决方案3】:

    我做两件事。要么

    User.IsInRole(admin)
    {link somewhere}
    

    或者我个人所做的是因为我使用了区域,我在区域管理中有一个 viewstart,它链接到管理共享视图模型,然后在管理共享视图中链接到公共视图。

    在管理员共享视图中。我设置了一个部分。在本节中,我定义了额外的导航细节,该特定角色将看到什么并将它们添加到列表标签中

    然后我在公共共享视图中使用(在手机上不记得确切的名称之类的)
    Html.IsSectionDefined

    我个人喜欢使用区域和部分的第二种方法都可以正常工作,但使用第二种方法我发现它更干净,你可以更具体和更简单

    【讨论】:

      猜你喜欢
      • 2013-12-21
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2011-12-09
      • 1970-01-01
      相关资源
      最近更新 更多