我在ASP.NET中有一个Web应用程序,它有一个站点地图。
如果为用户分配了角色roleX
,则必须仅显示其中一个菜单项。
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0">
<siteMapNode url="~/" title="Root" description="...">
<siteMapNode url="" title="Menu 1" description="" roles="*">
<siteMapNode url="~/Default.aspx" title="Item 1" description="" roles="*"/>
<siteMapNode url="~/rss.aspx" title="Subscription" description="" roles="*" />
</siteMapNode>
<siteMapNode url="~/specialPage.aspx"
title="Some special page"
description=""
roles="roleX"/>
</siteMapNode>
</siteMap>
在我的web.config
我设置了网站地图和角色提供商,如下所示:
<connectionStrings>
<add name="dbConnectionString" connectionString="Data Source=MY-MACHINE\SQLEXPRESS;Initial Catalog=MyDatabase;Persist Security Info=True;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>
</connectionStrings>
...
<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
<providers>
<add name="XmlSiteMapProvider"
description="Default SiteMap provider."
type="System.Web.XmlSiteMapProvider "
siteMapFile="Web.sitemap"
securityTrimmingEnabled="true"/>
</providers>
</siteMap>
<roleManager
defaultProvider="SqlProvider"
enabled="true"
cacheRolesInCookie="false"
cookieName=".ASPROLES"
cookieTimeout="30"
cookiePath="/"
cookieSlidingExpiration="true"
cookieProtection="All">
<providers>
<clear/>
<add
name="SqlProvider"
type="System.Web.Security.SqlRoleProvider"
connectionStringName="dbConnectionString"
applicationName="MyApp" />
</providers>
</roleManager>
有桌子
aspnet_Applications
aspnet_Membership
aspnet_Paths
aspnet_PersonalizationAllUsers
aspnet_PersonalizationPerUser
aspnet_Profile
aspnet_Roles
aspnet_SchemaVersions
aspnet_Users
aspnet_UsersInRoles
aspnet_WebEvent_Events
MyDatabase
中的。
aspnet_UsersInRoles
表中没有记录。
因此,当我启动Web应用程序时,菜单项(站点地图节点)specialPage.aspx
不应该可见(因为没有用户分配角色roleX
)。
但它仍然显示出来。
2个问题:
specialPage.aspx
角色,我该怎么做才能让菜单项roleX
可见?