我能够asp:Menu根据角色隐藏控件中的某些菜单项吗?
<asp:Menu ID="mTopMenu" runat="server" Orientation="Horizontal" />
<Items>
<asp:MenuItem Text="File">
<asp:MenuItem Text="New Project" />
<asp:MenuItem Text="Release Template" NavigateUrl="~/Release/ReleaseTemplate.aspx" />
<asp:MenuItem Text="Release Schedule" NavigateUrl="~/Release/ReleaseSchedule.aspx" />
<asp:MenuItem Text="Roles" NavigateUrl="~/Admin/AdminRoles.aspx" />
</asp:MenuItem>
</Items>
</asp:Menu>
Run Code Online (Sandbox Code Playgroud)
如何仅向Admin角色中的用户显示其中一个项目?我正在使用asp.net角色提供程序.
Jon*_*lin 28
您可以在Page_Load中删除不需要的菜单项,如下所示:
protected void Page_Load(object sender, EventArgs e)
{
if (!Roles.IsUserInRole("Admin"))
{
MenuItemCollection menuItems = mTopMenu.Items;
MenuItem adminItem = new MenuItem();
foreach (MenuItem menuItem in menuItems)
{
if (menuItem.Text == "Roles")
adminItem = menuItem;
}
menuItems.Remove(adminItem);
}
}
Run Code Online (Sandbox Code Playgroud)
我敢肯定有一种更简洁的方法可以找到合适的物品去除,但这个有效.您还可以在Page_Load方法中添加所有想要的菜单项,而不是在标记中添加它们.
the*_*ent 23
您可以将菜单项绑定到站点地图并使用roles属性.您需要在Web.Config中启用安全修整才能执行此操作.这是最简单的方法.
网站导航概述:http: //msdn.microsoft.com/en-us/library/e468hxky.aspx
安全修剪信息:http: //msdn.microsoft.com/en-us/library/ms178428.aspx
SiteMap绑定信息:http: //www.w3schools.com/aspnet/aspnet_navigation.asp
好的教程/概述:http: //weblogs.asp.net/jgalloway/archive/2008/01/26/asp-net-menu-and-sitemap-security-trimming-plus-a-trick-for-when-你的菜单和安全-DON-T-比赛up.aspx
另一个有效但不太理想的选择是使用loginview控件,它可以显示基于角色的控件.这可能是最快(但最不灵活/高性能)的选择.你可以在这里找到一个指南:http://weblogs.asp.net/sukumarraju/archive/2010/07/28/role-based-authorization-using-loginview-control.aspx
小智 14
我更喜欢使用FindItem方法并使用值路径来定位项目.确保菜单上的PathSeparator属性与您在FindItem参数中使用的属性相匹配.
protected void Page_Load(object sender, EventArgs e)
{
// remove manage user accounts menu item for non-admin users.
if (!Page.User.IsInRole("Admin"))
{
MenuItem item = NavigationMenu.FindItem("Users/Manage Accounts");
item.Parent.ChildItems.Remove(item);
}
}
Run Code Online (Sandbox Code Playgroud)
这最好在MenuItemDataBound中完成.
protected void NavigationMenu_MenuItemDataBound(object sender, MenuEventArgs e)
{
if (!Page.User.IsInRole("Admin"))
{
if (e.Item.NavigateUrl.Equals("/admin"))
{
if (e.Item.Parent != null)
{
MenuItem menu = e.Item.Parent;
menu.ChildItems.Remove(e.Item);
}
else
{
Menu menu = (Menu)sender;
menu.Items.Remove(e.Item);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
因为该示例使用了NavigateUrl,所以它不是特定于语言的,并且适用于具有本地化站点地图的站点.
| 归档时间: |
|
| 查看次数: |
119283 次 |
| 最近记录: |