我滚动自己的SiteMappRovider继承 System.Web.XmlSiteMapProvider.

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

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

我怎样才能做到这一点?哪个班级的成员XMLSITEMAPPROVIDER致电以检查是否 securityTrimmingEnabled="true"?

有帮助吗?

解决方案

Abatishchev接近,但没有提供明确的指导。呼叫基础将应用默认的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);
}

其他提示

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

最简单的话,如果有人想要答案,就是将其添加到您的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>

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top