Web.sitemap文件中siteMapNode节点有roles属性,但是直接设置并不起作用,查证资料后发现需在web.config文件中设置Site Map Providers才可以。
然后在Web.sitemap文件中相应的siteMapNode节点上加上roles属性即可。但只可以加在一级节点上,二级节点上无效,例子如下。
另外查询MSDN,发现可以使用Site Map Providers可以连接到数据库中读取sitemap
首先要使用SiteMapApi来作一个自定义的Provider
里面用到了一个存储过程
然后在web.config里做如下设置
数据库sitemap表结构
数据的实例
MSDN上Site Map Providers说明地址: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNETProvMod_Prt3.asp
<system.web>
...
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="SiteMap provider which reads in .sitemap XML files."
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
</system.web>
...
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="SiteMap provider which reads in .sitemap XML files."
type="System.Web.XmlSiteMapProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
</system.web>
然后在Web.sitemap文件中相应的siteMapNode节点上加上roles属性即可。但只可以加在一级节点上,二级节点上无效,例子如下。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns=" http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="系统管理" description="" roles="系统管理帐户,用户管理员">
<siteMapNode url="~/System/UserManage.aspx" title="用户管理" description=""/>
<siteMapNode url="~/System/CreateUser.aspx" title="创建用户" description=""/>
<siteMapNode url="~/System/CityManage.aspx" title="地市维护" description=""/>
</siteMapNode>
</siteMap>
<siteMap xmlns=" http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="" title="系统管理" description="" roles="系统管理帐户,用户管理员">
<siteMapNode url="~/System/UserManage.aspx" title="用户管理" description=""/>
<siteMapNode url="~/System/CreateUser.aspx" title="创建用户" description=""/>
<siteMapNode url="~/System/CityManage.aspx" title="地市维护" description=""/>
</siteMapNode>
</siteMap>
另外查询MSDN,发现可以使用Site Map Providers可以连接到数据库中读取sitemap
首先要使用SiteMapApi来作一个自定义的Provider
里面用到了一个存储过程
Create PROCEDURE proc_GetSiteMap AS Select [ID], [Title],[Description], [Url], [Roles], [Parent] FROM [SiteMap] orDER BY [ID]
然后在web.config里做如下设置
<configuration>
<connectionStrings>
<add name="SiteMapConnectionString" connectionString="..." />
</connectionStrings>
<system.web>
<siteMap enabled="true" defaultProvider="AspNetSqlSiteMapProvider">
<providers>
<add name="AspNetSqlSiteMapProvider" type="SqlSiteMapProvider, CustomProviders" description="SQL Server site map provider" securityTrimmingEnabled="true" connectionStringName="SiteMapConnectionString" />
</providers>
</siteMap>
</system.web>
</configuration>
<connectionStrings>
<add name="SiteMapConnectionString" connectionString="..." />
</connectionStrings>
<system.web>
<siteMap enabled="true" defaultProvider="AspNetSqlSiteMapProvider">
<providers>
<add name="AspNetSqlSiteMapProvider" type="SqlSiteMapProvider, CustomProviders" description="SQL Server site map provider" securityTrimmingEnabled="true" connectionStringName="SiteMapConnectionString" />
</providers>
</siteMap>
</system.web>
</configuration>
数据库sitemap表结构
Create TABLE [dbo].[SiteMap] (
[ID] [int] NOT NULL,
[Title] [varchar] (32),
[Description] [varchar] (512),
[Url] [varchar] (512),
[Roles] [varchar] (512),
[Parent] [int]
) ON [PRIMARY]
GO
Alter TABLE [dbo].[SiteMap] ADD
CONSTRAINT [PK_SiteMap] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
[ID] [int] NOT NULL,
[Title] [varchar] (32),
[Description] [varchar] (512),
[Url] [varchar] (512),
[Roles] [varchar] (512),
[Parent] [int]
) ON [PRIMARY]
GO
Alter TABLE [dbo].[SiteMap] ADD
CONSTRAINT [PK_SiteMap] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
GO
数据的实例
MSDN上Site Map Providers说明地址: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/ASPNETProvMod_Prt3.asp