san*_*tro 1 asp.net web.sitemap
我目前正在使用ADFS身份验证机制来验证用户身份.在这种情况下,我将authenticationmode设置为None而不是表单身份验证.用户成功登录后,声明对象将提供与loggedIn用户关联的角色数据,因此在这种情况下,站点地图角色属性将如何从声明对象中获取角色.你能解释一下如何使用securityTrimmingEnabled属性吗?
我使用自定义类ADFSRoleProvider.cs继承了RoleProvider类并重写了方法GetRolesForUser方法但是除非我设置了方法,否则不会调用该方法
<authentication mode="Forms"/>
Run Code Online (Sandbox Code Playgroud)
而这又不能与siteMapNode节点中提到的roles属性进行交互.
主要问题是在用户成功使用ADFS身份验证机制登录后,sitemap角色属性如何了解loggedIn用户的角色.
请提供一些代码示例和有关上述问题的帮助.
您确定需要自定义角色提供程序吗?该IClaimsPrincipal对象为用户提供角色,它接受您的类型声明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;
}
}
Run Code Online (Sandbox Code Playgroud)
只需将其注册web.config为您的SiteMapProvider:
<siteMap enabled ="true" defaultProvider="XmlSiteMapDefaultProvider">
<providers>
<add name="XmlSiteMapDefaultProvider" type="XmlSiteMapDefaultProvider" siteMapFile="Web.sitemap" securityTrimmingEnabled="true" />
</providers>
</siteMap>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3787 次 |
| 最近记录: |