Sitecore - 角色提供者的交换提供者不尊重域

Dav*_*ers 7 asp.net asp.net-membership sitecore membership-provider

我们有多个站点运行一个sitecore实例.其中一个站点要求通过外部后端系统管理用户和角色,因此,我们为每个站点配置了自定义成员资格和角色提供程序以及域.但是,由于某种原因,角色提供程序上的切换器似乎并未受到尊重.如果我以sitecore用户身份登录CMS,它仍会调用我的自定义角色提供程序来尝试为此用户获取角色,尽管角色提供程序是针对其他域配置的?

当实际用户登录到站点时,角色提供程序正常工作,但当CMS用户正在编辑页面时,它不应被命中.

在我们的Web.config中配置:

<roleManager defaultProvider="sitecore" enabled="true" cookieRequireSSL="false" createPersistentCookie="false" cookieSlidingExpiration="true" cacheRolesInCookie="false">
  <providers>
    <clear />
    <add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true" />
    <add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore" />
    <add name="MyProvider" type="MyApp.Web.Infrastructure.Security.RoleProviders.MyProvider, MyApp.Web" applicationName="sitecore" />
    <add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager" />
  </providers>
</roleManager>
Run Code Online (Sandbox Code Playgroud)

加上我们修补的sitecore配置:

<switchingProviders>
  <roleManager>
    <provider providerName="MyProvider" storeFullNames="false" wildcard="%" domains="mydomain" patch:after="provider[@providerName='sql']"/>
  </roleManager>
</switchingProviders>
Run Code Online (Sandbox Code Playgroud)

Hay*_*man 9

这似乎是Sitecore的一个怪癖/错误.使用SwitchingRoleProvider时,将忽略domain属性,并在所有域中调用已实现的提供程序.

使用此角色提供程序时,添加了2个未记录的属性:

ignoredUserDomains - 提供者不会应用于的域的逗号分隔列表.

allowedUserDomains - 提供程序应用于的域的逗号分隔列表.

您只能为角色提供程序指定其中一个,并且两者都将引发异常.

在您使用的示例中,以下内容应解决您的问题:

<switchingProviders>
  <roleManager>
    <provider providerName="MyProvider" storeFullNames="false" wildcard="%" allowedUserDomains="mydomain" patch:after="provider[@providerName='sql']"/>
  </roleManager>
</switchingProviders>
Run Code Online (Sandbox Code Playgroud)

(来源)