Asp.net XmlSiteMapProvider如何检查用户是否处于指定角色?
我使用自己的SiteMapProvider继承Asp.net XmlSiteMapProvider如何检查用户是否处于指定角色?,asp.net,sitemapprovider,security-trimming,isaccessibletouser,securitytrimmingenabled,Asp.net,Sitemapprovider,Security Trimming,Isaccessibletouser,Securitytrimmingenabled,我使用自己的SiteMapProvider继承System.Web.XmlSiteMapProvider 我想重写将用户检查为在siteMapNode的属性角色中指定的角色的逻辑: <siteMapNode url="Add.aspx?type=user" title="Add user" roles="admin" /> 我该怎么做?XmlSiteMapProvider调用哪个类的成员来检查securityTrimmingEnabled=“true”?abatishchev是
System.Web.XmlSiteMapProvider
我想重写将用户检查为在siteMapNode的属性角色中指定的角色的逻辑:
<siteMapNode url="Add.aspx?type=user" title="Add user" roles="admin" />
我该怎么做?XmlSiteMapProvider调用哪个类的成员来检查securityTrimmingEnabled=“true”
?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);
}
如果有人想知道这个问题的答案,最简单的方法就是将其添加到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”不幸的是,我的问题有一段时间没有吸引任何用户,所以我不得不自己找到解决方案,幸运的是我做到了。你们不能说我是同时行动的,而单一的答案也是我的。因为接受自己的答案不会带来声誉,我很高兴接受你的答案:)谢谢@aba-事实上,我没有注意到OP和答案来自同一个人,只是指导可以更清楚一点。很高兴你找到了答案,也很高兴我能帮忙,如果我找到了。好的,我可以覆盖IsAccessibleToUser
以应用自己的逻辑进行检查。但是原始的IsAccessibleToUser
是如何工作的呢?反射器显示它检查context.User.IsInRole(角色)
。您知道如何将角色设置为IPrincipal
?
<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>