角色与网站地图的结合
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角色,看看前后导航菜单的区别。
当来之世,经道灭尽,我以慈悲哀愍,特留此经止住百岁。其有众生,值斯经者,随意所愿,皆可得度。(南无阿弥陀佛)
道可道,非常道;名可名,非常名。
我常说,一个国家,一个民族,亡国都不怕,最可怕的是一个国 家和民族自己的根本文化亡掉了,这就会沦为万劫不复,永远不会翻身。---南怀瑾<国学大师>




浙公网安备 33010602011771号