您确定需要自定义角色提供程序吗?该IClaimsPrincipal
对象为用户提供角色,它接受您的 type 声明ClaimTypes.Role
。
可能是您的问题是由securityTrimming
实施中的一些不一致引起的。几年前,我不得不编写自己的站点地图提供程序来正确处理修剪。
public class XmlSiteMapDefaultProvider : XmlSiteMapProvider
{
public override bool IsAccessibleToUser( HttpContext context, SiteMapNode node )
{
if ( node.Roles.Count > 0 )
{
foreach ( string role in node.Roles )
if ( role == "*" &&
context.User != null &&
context.User.Identity != null &&
context.User.Identity.IsAuthenticated
)
return true;
else
{
if ( context.User != null )
if ( context.User.IsInRole( role ) )
return true;
}
return false;
}
return true;
}
}
只需将其注册web.config
为您的 SiteMapProvider:
<siteMap enabled ="true" defaultProvider="XmlSiteMapDefaultProvider">
<providers>
<add name="XmlSiteMapDefaultProvider" type="XmlSiteMapDefaultProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>