2017-06-20 43 views
0

我有一个MVC WebApp,我正在成功验证Azure AD角色并将其拖放到我的应用中。如何根据角色在我的_Layout.cshtml文件中显示或隐藏像'home''等'左右导航栏选项卡?MVC Webapp隐藏/显示带有Azure AD角色的网站选项卡

我可以授权页面在控制器[Authorize(Roles = "")]但我想隐藏在导航栏级别。我错过了什么代码行来使这个动态?

这里是我的_Layout.cshtml文件中的代码,我希望做到这一点:

 <div class="navbar-header"> 
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
       <span class="icon-bar"></span> 
      </button> 
      @Html.ActionLink("My Project", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
     </div> 
     <div class="navbar-collapse collapse"> 
      <ul class="nav navbar-nav"> 
       <li>@Html.ActionLink("Home", "Index", "Home")</li> 
       <li>@Html.ActionLink("About", "About", "Home")</li> 
       <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
      </ul> 
      @Html.Partial("_LoginPartial") 
     </div> 

提前帮助谢谢!

回答

1

在MVC上,您有User对象,该对象为您提供有关记录的用户的信息。只需使用User.IsInRole(roleName)方法,它应该可以工作。

例子:

<div class="navbar-header"> 
     <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
     </button> 
     @Html.ActionLink("My Project", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" }) 
    </div> 
    <div class="navbar-collapse collapse"> 
     <ul class="nav navbar-nav"> 
      <li>@Html.ActionLink("Home", "Index", "Home")</li> 
      <li>@Html.ActionLink("About", "About", "Home")</li> 
      @if(User.IsInRole("Admin")) 
      { 
       //Only the user with "Admin" role can see this 
       <li>@Html.ActionLink("Contact", "Contact", "Home")</li> 
      } 
     </ul> 
     @Html.Partial("_LoginPartial") 
    </div> 
+1

完美地工作!谢谢你的快速反应。 – Alex

+0

很高兴提供帮助。请务必检查正确的答案,以便其他遇到同样问题的人可以更轻松地找到答案。 –

相关问题