我可以根据角色隐藏/显示 asp:Menu 项吗?
我可以根据角色隐藏 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>
如何使这些项目之一仅对管理员角色的用户可见? 我正在使用 asp.net 角色提供程序。
Am I able to hide certain menu items in an asp:Menu
control based on role?
<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>
How can I make one of these items visible to only users in the Admin role?
I am using asp.net role provider.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
您可以在 Page_Load 中删除不需要的菜单项,如下所示:
我确信有一种更简洁的方法可以找到要删除的正确项目,但这个方法有效。您还可以在 Page_Load 方法中添加所有所需的菜单项,而不是在标记中添加它们。
You can remove unwanted menu items in Page_Load, like this:
I'm sure there's a neater way to find the right item to remove, but this one works. You could also add all the wanted menu items in a Page_Load method, instead of adding them in the markup.
您可以将菜单项绑定到站点地图并使用角色属性。您需要在 Web.Config 中启用安全调整才能执行此操作。这是最简单的方法。
网站导航概述:
http://msdn.microsoft.com/en-us/library/e468hxky.aspx
安全性修剪信息:
http://msdn.microsoft.com/en-us/library/ms178428.aspx
绑定信息:
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-your-menu-and-security-don-t-match-up.aspx
另一种有效但不太理想的选项是使用 loginview 控件,可以根据角色显示控件。这可能是最快(但最不灵活/性能)的选项。您可以在此处找到指南:http:// /weblogs.asp.net/sukumarraju/archive/2010/07/28/role-based-authorization-using-loginview-control.aspx
You can bind the menu items to a site map and use the roles attribute. You will need to enable Security Trimming in your Web.Config to do this. This is the simplest way.
Site Navigation Overview:
http://msdn.microsoft.com/en-us/library/e468hxky.aspx
Security Trimming Info:
http://msdn.microsoft.com/en-us/library/ms178428.aspx
SiteMap Binding Info:
http://www.w3schools.com/aspnet/aspnet_navigation.asp
Good Tutorial/Overview here:
http://weblogs.asp.net/jgalloway/archive/2008/01/26/asp-net-menu-and-sitemap-security-trimming-plus-a-trick-for-when-your-menu-and-security-don-t-match-up.aspx
Another option that works, but is less ideal is to use the loginview control which can display controls based on role. This might be the quickest (but least flexible/performant) option. You can find a guide here: http://weblogs.asp.net/sukumarraju/archive/2010/07/28/role-based-authorization-using-loginview-control.aspx
我更喜欢使用 FindItem 方法并使用值路径来查找项目。确保菜单上的 PathSeparator 属性与 FindItem 参数中使用的属性相匹配。
I prefer to use the FindItem method and use the value path for locating the item. Make sure your PathSeparator property on the menu matches what you're using in FindItem parameter.
这最好在 MenuItemDataBound 中完成。
由于该示例使用 NavigateUrl,因此它不特定于语言,并且适用于具有本地化站点地图的站点。
This is best done in the MenuItemDataBound.
Because the example used the NavigateUrl it is not language specific and works on sites with localized site maps.
简单的方法可能并不适合所有情况
SIMPLE method may not be the best for all cases
试试这个:
Try this:
我的菜单位于网站母版页中。我使用 Page_Load() 函数使“Admin”菜单项仅对具有管理员角色的用户可见。
I have my menu in the site master page. I used the Page_Load() function to make the "Admin" menu item only visible to users with an Admin role.
:从 ASP.net
NavigationMenu
中删除MenuItem
要通过
Value
:和帮助程序扩展以及示例用法:
To remove a
MenuItem
from an ASP.netNavigationMenu
byValue
:and helper extension:
and sample usage:
您只需在页面初始化事件中删除父菜单即可。
You just have to remove the parent menu in the page init event.
根据角色查找内容页面中的菜单项
To find menu items in content page base on roles