XmlSiteMapProvider如何检查用户是否处于指定角色?

时间:2010-05-22 13:58:38

标签: asp.net sitemapprovider security-trimming isaccessibletouser securitytrimmingenabled

我将自己的SiteMapProvider继承为System.Web.XmlSiteMapProvider

我想覆盖检查用户是否在siteMapNode的属性roles中指定的角色的逻辑:

<siteMapNode url="Add.aspx?type=user" title="Add user" roles="admin" />

我该怎么做? XmlSiteMapProvider调用哪个类的成员来检查securityTrimmingEnabled="true"

3 个答案:

答案 0 :(得分:3)

abatishchev很接近,但没有提供明确的指导。调用base将应用默认的asp.net访问控制规则。如果你有自定义规则,只需做出决定并返回一个bool。

public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     // use the properties of the context and node to determine accessibility.

     // only call base if you do not want to apply your custom rules
     // return base.IsAccessibleToUser(context, node);
}

答案 1 :(得分:1)

public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     var roles = node.Roles; // here it is!
     return base.IsAccessibleToUser(context, node);
}

答案 2 :(得分:0)

最简单的是,如果有人想要回答这个问题,请将其添加到您的web.config

<siteMap defaultProvider="XmlSiteMapProvider" enabled="true">
    <providers>
      <clear/>
      <add name="XmlSiteMapProvider"
           description="Default Sitemap Provider"
           type="System.Web.XmlSiteMapProvider"
           siteMapFile="Web.sitemap"
           securityTrimmingEnabled="true"/>
    </providers>
  </siteMap>

然后在您的站点地图中,您可以添加属性roles =“something”