3

我推出了自己的 SiteMapProvider 继承System.Web.XmlSiteMapProvider

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

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

我怎样才能做到这一点?XmlSiteMapProvider 调用哪个类的成员来检查 if securityTrimmingEnabled="true"

4

3 回答 3

3

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

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);
}
于 2010-05-22T15:05:29.667 回答
1
public override bool IsAccessibleToUser(HttpContext context, SiteMapNode node)
{
     var roles = node.Roles; // here it is!
     return base.IsAccessibleToUser(context, node);
}
于 2010-05-22T14:09:57.053 回答
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"

于 2013-06-25T17:21:47.213 回答