我在我的ASP.Net MVC应用程序中有一个metisMenu,我正在做的是隐藏一些基于用户AD组成员身份的选项。隐藏基于AD组成员身份的菜单选项
该应用程序当前正在使用Windows集成身份验证(Intranet应用程序)。
这样做的最好方法是什么?
我假设我可以做一个viewbag选项,然后如果真或flase要么显示或隐藏,但这将意味着我将不得不为每个动作编码的东西?
菜单是共享的布局,低于
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>CCL Support System</title>
<link rel="shortcut icon" type="image/png" href="~/img/favicon.png" />
@*CSS Declerations*@
<link href="~/Content/bootstrap.min.css" rel="stylesheet">
<link href="~/Content/plugins/metisMenu/metisMenu.min.css" rel="stylesheet">
<link href="~/Content/ccl.less" rel="stylesheet" type="text/css">
<link href="~/Content/font-awesome.min.css" rel="stylesheet">
<link href="~/Content/themify-icons.css" rel="stylesheet">
<link href='http://fonts.googleapis.com/css?family=Open+Sans:400,300,600,800' rel='stylesheet' type='text/css'>
@*JavaScript Declerations*@
<script src="~/Scripts/less.min.js" type="text/javascript"></script>
<script src="~/scripts/jquery-2.1.1.js" type="text/javascript"></script>
<script src="~/scripts/bootstrap.min.js" type="text/javascript"></script>
<script src="~/scripts/plugins/metisMenu/metisMenu.min.js" type="text/javascript"></script>
<script src="~/scripts/sb-admin-2.js" type="text/javascript"></script>
<script src="~/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
<script src="~/Scripts/expand.js" type="text/javascript"></script>
</head>
<body class="ccl-body">
<div id="wrapper">
<nav class="navbar navbar-default navbar-fixed-top ccl-header" role="navigation">
<div>
<ul class="nav navbar-nav navbar-right">
<li class="dropdown navbar-profile">
<a style="z-index: 1" href="#" class="dropdown-toggle navbar-profile-icon" data-toggle="dropdown"><span class="ti-settings menu-icon"></span><span class="caret"></span></a>
<ul class="dropdown-menu" role="menu">
<li><a href="@Url.Action("Edit", "Profile")">Edit User Details</a></li>
</ul>
</li>
</ul>
</div>
<div class="logo-box">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="ccl-logo" href="@Url.Action("index", "Home")"><img src="~/img/logo.png" width="75" height="73" alt="" /></a>
</div>
<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<li>
<a href="@Url.Action("index", "Home")"><span class=" ti-info menu-icon"></span>Information<span class="ti-angle-right menu-carret pull-right"></span></a>
<ul class="nav nav-second-level">
<li>
<a href="@Url.Action("About", "Home")">About</a>
</li>
<li>
<a href="@Url.Action("License", "Home")">Licenses</a>
</li>
<li>
<a href="@Url.Action("Bug", "Home")">Bug Report</a>
</li>
</ul>
</li>
<li>
<a href="@Url.Action("Search", "Password")"><span class=" ti-key menu-icon"></span>Reset Passsword</a>
</li>
</ul>
</div>
</div>
</nav>
<!-- Main Panel -->
<div id="page-wrapper" class="content">
@if (IsSectionDefined("title"))
{
<div id="page-block" class="page-block-header row">
<div class="col-lg-offset-1 col-lg-10">
@RenderSection("title", false)
</div>
</div>
}
@if (IsSectionDefined("subtitle"))
{
<div id="page-block" class="page-block-two row">
<div class="col-lg-offset-1 col-lg-10">
@RenderSection("subtitle", false)
</div>
</div>
}
@RenderBody()
</div>
</div>
<!-- Footer -->
<div class="navbar ccl-footer">
<div class="pull-right">
<p>© 2014 Computer Concepts Ltd</p>
</div>
</div>
</body>
</html>
如果我们在菜单看起来更密切(摘录如下)
div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<li>
<a href="@Url.Action("index", "Home")"><span class=" ti-info menu-icon"></span>Information<span class="ti-angle-right menu-carret pull-right"></span></a>
<ul class="nav nav-second-level">
<li>
<a href="@Url.Action("About", "Home")">About</a>
</li>
<li>
<a href="@Url.Action("License", "Home")">Licenses</a>
</li>
<li>
<a href="@Url.Action("Bug", "Home")">Bug Report</a>
</li>
</ul>
</li>
<li>
<a href="@Url.Action("Search", "Password")"><span class=" ti-key menu-icon"></span>Reset Passsword</a>
</li>
</ul>
</div>
</div>
我寻找隐藏在此的某些选项的一部分
什么是最好的方法,我需要创建一个自定义的认证类?如果是的话,任何人都有如何做到这一点的好链接?
所以,最终的结果是,如果用户在XYZ AD组则显示
<li>
<a href="@Url.Action("Search", "Password")"><span class=" ti-key menu-icon"></span>Reset Passsword</a>
</li>
否则隐藏它。
你可以创建你自己的'ActionFilter',增加了一个'ViewBag'属性(全球注册的话),或使用'@ Html.Action()'调用呈现菜单(其中该方法决定了一个孩子的行动显示基于用户角色) – 2014-11-23 22:35:10