asp.net-mvc-3 – ASP.Net MVC隐藏/显示基于安全性的菜单项
发布时间:2020-05-28 11:01:17 所属栏目:asp.Net 来源:互联网
导读:我在一个ASP.Net MVC 3网站上工作. _Layout主视图包含一个菜单,我想根据您登录的内容以及您所处的角色隐藏菜单中的某些项目. 目前使用这样的代码 @if (HttpContext.Current.User.Identity.IsAuthenticated){ li id=MyLearningTab@Html.ActionLink(My Learning
|
我在一个ASP.Net MVC 3网站上工作. _Layout主视图包含一个菜单,我想根据您登录的内容以及您所处的角色隐藏菜单中的某些项目. 目前使用这样的代码 @if (HttpContext.Current.User.Identity.IsAuthenticated)
{
<li id="MyLearningTab">@Html.ActionLink("My Learning","MyLearning","Learning")</li>
if (HttpContext.Current.User.IsInRole("Reporters"))
{
<li id="ReportTab">@Html.ActionLink("Reports","Index","Reports")</li>
}
if (HttpContext.Current.User.IsInRole("Administrators"))
{
<li id="DashboardTab">@Html.ActionLink("Dashboard","Dashboard","Admin")</li>
<li id="AdminTab">@Html.ActionLink("Admin","Admin")</li>
}
}
我想重构这个更可读的东西,并提出了这样的东西 @if ((bool)ViewData["MenuMyLearning"]){<li id="MyLearningTab">@Html.ActionLink("My Learning","Learning")</li> }
@if((bool)ViewData["MenuReports"]){<li id="ReportTab">@Html.ActionLink("Reports","Reports")</li>}
@if ((bool)ViewData["MenuDashboard"]){<li id="DashboardTab">@Html.ActionLink("Dashboard","Admin")</li>}
@if ((bool)ViewData["MenuAdmin"]){<li id="AdminTab">@Html.ActionLink("Admin","Admin")</li>}
我原来添加以下内容到我的基本控制器构造函数,以为我可以为这些属性设置ViewData ViewData["MenuDashboard"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Administrators");
ViewData["MenuAdmin"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Administrators");
ViewData["MenuReports"] = User != null && User.Identity.IsAuthenticated && User.IsInRole("Reportors");
ViewData["MenuMyLearning"] = User != null && User.Identity.IsAuthenticated;
但是,在生命周期的这一点上,用户对象为空.我也试过创建一个自定义的全局过滤器,但ViewData然后是不可访问的. 做这样的推荐方法是什么?我应该离开它最初是在视图中的所有HttpContext代码? 解决方法这是我最后做的我为每个菜单项创建了一个名为MenuSecurity的辅助类,并显示哪些项目应该可见的静态布尔属性.每个房产都看起来像这样public static bool DashboardVisible
{
get
{
return
HttpContext.Current.User != null &&
HttpContext.Current.User.Identity.IsAuthenticated;
}
}
然后我将菜单的部分视图整理为这样 @if (MenuSecurity.ReportsVisible){<li id="ReportTab">@Html.ActionLink("Reports","Reports")</li>}
@if (MenuSecurity.DashboardVisible){<li id="DashboardTab">@Html.ActionLink("Dashboard","Admin")</li>}
@if (MenuSecurity.AdminVisible){<li id="AdminTab">@Html.ActionLink("Admin","Admin")</li>} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc – 使用html.actionlink将模型从视图传递到控制
- ASP.NET线程敏捷 – 如何克服?
- asp.net-mvc – MVC4 HTML TextBox在修改ViewModel后不起作
- 如何使ASP.NET MVC应用程序多语言?
- 如何配置asp.net进程在域帐户下运行?
- asp.net使用AJAX实现无刷新分页
- 如何在aspx页面中隐藏ASP.NET自定义控件的属性?
- asp.net-mvc – ASP.NET MVC的Content / Themes / base Dir
- ASP.NET GridView SortedAscendingHeaderStyle不起作用
- ASP.NET标识 – 强制使用安全戳重新登录
推荐文章
站长推荐
- asp.net – SQL Server 2005 – 您应该多久重建一
- asp.net-mvc-3 – 为什么我的自定义HTML助手结果
- asp.net会员提供者Guid userID
- asp.net – Response.End()和Response.Flush()之
- asp.net-mvc – VIEWDATA和VIEWBAG存储在MVC中的
- ASP.NET通过分布式Session提升性能
- asp.net-mvc-3 – MVC3中的模型级错误?
- “DataSource和DataSourceID都被定义为”使用ASP
- asp.net-mvc – 如何在ASP.NET MVC中将多个对象传
- asp.net – 表单身份验证web.config设置
热点阅读
