Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用用于ADFS身份验证机制的sitemap控件创建基于角色的ASP.NET菜单_Asp.net_Web.sitemap - Fatal编程技术网

使用用于ADFS身份验证机制的sitemap控件创建基于角色的ASP.NET菜单

使用用于ADFS身份验证机制的sitemap控件创建基于角色的ASP.NET菜单,asp.net,web.sitemap,Asp.net,Web.sitemap,我目前正在使用ADFS身份验证机制对用户进行身份验证。在这种情况下,我将authenticationmode设置为None,而不是forms身份验证。用户loggedIn成功后,claims对象将提供与loggedIn用户关联的角色数据,因此在这种情况下,sitemap roles属性将如何从claims对象提取角色。您能解释一下如何使用securityTrimmingEnabled属性吗 我使用了自定义类ADFSRoleProvider.cs,它继承了RoleProvider类并重写了GetR

我目前正在使用ADFS身份验证机制对用户进行身份验证。在这种情况下,我将authenticationmode设置为None,而不是forms身份验证。用户loggedIn成功后,claims对象将提供与loggedIn用户关联的角色数据,因此在这种情况下,sitemap roles属性将如何从claims对象提取角色。您能解释一下如何使用securityTrimmingEnabled属性吗

我使用了自定义类ADFSRoleProvider.cs,它继承了RoleProvider类并重写了GetRolesForUser方法,但除非我设置

<authentication mode="Forms"/>

这反过来也无法与siteMapNode中提到的roles属性交互

主要问题是在用户使用ADFS身份验证机制成功登录后,sitemap角色属性如何知道loggedIn用户的角色


请提供一些关于上述问题的代码示例和帮助。

您确定需要自定义角色提供程序吗?
IClaimsPrincipal
对象为用户提供角色,它接受类型为
ClaimTypes.Role的声明

您的问题可能是由
securitytriming
实现中的一些不一致引起的。几年前,我必须编写自己的站点地图提供商来正确处理修剪

   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>

您确定需要自定义角色提供程序吗?
IClaimsPrincipal
对象为用户提供角色,它接受类型为
ClaimTypes.Role的声明

您的问题可能是由
securitytriming
实现中的一些不一致引起的。几年前,我必须编写自己的站点地图提供商来正确处理修剪

   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>


您好,非常感谢您的回复。是的,关于以下行您是正确的:IClaimsPrincipal对象为用户提供角色,它接受您对ClaimTypes.Role类型的声明。请将带有ClaimTypes.Role的示例代码与sitemap控件一起发送给我,而不是上面的自定义XmlSiteMapDefaultProvider实现。上面的sitemap提供程序可以与标准sitemap控件一起使用。您好,非常感谢您的回复。是的,关于以下行您是正确的:IClaimsPrincipal对象为用户提供角色,它接受您对ClaimTypes.Role类型的声明。请将带有ClaimTypes.Role的示例代码与sitemap控件一起发送给我,而不是上面的自定义XmlSiteMapDefaultProvider实现。上面的sitemap提供程序可以与标准sitemap控件一起使用。