角色与网站地图的结合
1、准在母版页上加入导航菜单功能,数据源来自站点地图。web.sitemap内容大致如下:
<?xml version="1.0" encoding="utf-8" ?> <siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" enableLocalization ="true" > <siteMapNode title="主页" url="~/Default.aspx"> <siteMapNode title="文章" url="~/ShowCategories.aspx"> <siteMapNode title="浏览文章" url="~/BrowseArticles.aspx" /> </siteMapNode> <siteMapNode title="购物" url="~/ShowDepartments.aspx"> <siteMapNode title="购物卡" url="~/ShoppingCart.aspx" /> <siteMapNode title="订单记录" url="~/OrderHistory.aspx" /> <siteMapNode title="产品浏览" url="~/BrowseProducts.aspx"> </siteMapNode> </siteMapNode> <siteMapNode title="论坛" url="~/ShowForums.aspx"> <siteMapNode title="Show Thread" url="~/ShowThread.aspx" /> </siteMapNode> <siteMapNode title="关于" url="~/About.aspx" /> <siteMapNode title="联系" url="~/Contact.aspx" /> <siteMapNode title="管理员" url="~/Admin/Default.aspx"> <siteMapNode title="管理用户" url="~/Admin/ManageUsers.aspx" > <siteMapNode title="编辑用户" url="~/Admin/EditUser.aspx" /> </siteMapNode> <siteMapNode title="文章管理" url="~/Admin/ManageArticles.aspx" > <siteMapNode title="增加/修改 文章" url="~/Admin/AddEditArticle.aspx" /> </siteMapNode> </siteMapNode> </siteMapNode> </siteMap>
为什么主页节点会作为根节点,而不是同其他节点在同一层次上?实际上这是可选的,我们希望SiteMapPath控件在页面路径的最前端始终显示主页链接,所以将主页节点作为根节点。
网站根目录下新建母版页template.master,源视图代码:
<form id="form1" runat="server"> <table> <tr> <td colspan="2" width="60%" bgcolor="#3399FF"> </td> <td> <asp:LoginView ID="LoginView1" runat="server"> <AnonymousTemplate> <asp:Login ID="Login1" runat="server"> </asp:Login> </AnonymousTemplate> <LoggedInTemplate> <asp:LoginName ID="LoginName1" FormatString="欢迎您,{0}!" runat="server" /><br /> <asp:HyperLink ID="lnkProfile" NavigateUrl="~/EditProfile.aspx" runat="server">编辑用户资料</asp:HyperLink> <br/> <asp:LoginStatus runat="server"> </asp:LoginStatus> </LoggedInTemplate> </asp:LoginView> </td> </tr> <tr> <td width="20%" bgcolor="Lime"> </td> <td> <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1" StaticSubMenuIndent=""></asp:Menu> <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"> </asp:ContentPlaceHolder> </td> <td width="20%" bgcolor="#3366FF"> </td> </tr> </table> <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" /> </form>
对应的设计视图:
注意:这里用了LoginView控件来决定匿名用户与登录用户呈现不同的部分。(该控件的用法请参考:http://www.cnblogs.com/netxiaochong/archive/2011/12/25/2301024.html)
menu控件的属性如下设置:
<asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"
StaticSubMenuIndent="" Orientation="Horizontal" StaticDisplayLevels="2"></asp:Menu>
新建Default.aspx页面(若项目已有则删除后重建),并应用母版页template.master,浏览该页面,看效果:
匿名用户访问此页面的时候,以及非管理员角色(Administrators)的注册用户都是不能见到【管理员】菜单项的。
我们对web.sitemap进行相应的设置。
<siteMapNode title="管理员" url="~/Admin/Default.aspx" roles="Administrators">
还必须为网站地图注册一个新的提供程序(在web.config的<siteMap>中),设置其为securityTrimmingEnabled属性为true。
提示:<siteMap>节点 位置放在<membership>之后,可能才正常!
再次运行default.aspx页面,然后用[张鲁鲁]登录系统,因为该用户属于Administrators角色,看看前后导航菜单的区别。
当来之世,经道灭尽,我以慈悲哀愍,特留此经止住百岁。其有众生,值斯经者,随意所愿,皆可得度。(南无阿弥陀佛)
道可道,非常道;名可名,非常名。
我常说,一个国家,一个民族,亡国都不怕,最可怕的是一个国 家和民族自己的根本文化亡掉了,这就会沦为万劫不复,永远不会翻身。---南怀瑾<国学大师>