Security Sitecore 6是否可以在虚拟用户已登录时更改其角色?

Security Sitecore 6是否可以在虚拟用户已登录时更改其角色?,security,sitecore,sitecore6,Security,Sitecore,Sitecore6,在Sitecore 6中,当虚拟用户已经登录时,是否可以更改其角色 我想更改已登录到系统的虚拟用户的角色,但Sitecore似乎忽略了这一点。我可以清除角色并添加新角色,但所有旧角色仍附加到用户。 我想我应该重新登录用户,但这不是我的情况 virtualUser.RuntimeSettings.AddedRoles.Clear(); virtualUser.Roles.RemoveAll(); if(permissions!=null&&permissions.Any()) { foreach(

在Sitecore 6中,当虚拟用户已经登录时,是否可以更改其角色

我想更改已登录到系统的虚拟用户的角色,但Sitecore似乎忽略了这一点。我可以清除角色并添加新角色,但所有旧角色仍附加到用户。 我想我应该重新登录用户,但这不是我的情况

virtualUser.RuntimeSettings.AddedRoles.Clear();
virtualUser.Roles.RemoveAll();
if(permissions!=null&&permissions.Any())
{
foreach(permissions.Where(d=>!string.IsNullOrEmpty(d.Type))中的var角色)
{
string domainRole=string.Format(“{0}\\{1}”,“外部网”,role.Type);
if(SC.Security.Accounts.Role.Exists(domainRole))
{
virtualUser.RuntimeSettings.AddedRoles.Add(domainRole);
}
}
}

似乎注销和重新登录将设置正确的角色,因为在登录期间,
AuthenticationManager
将清除包含
用户配置文件和
角色的SecurityCache。
我看不到向当前经过身份验证的用户添加新角色的方法。

您可以尝试使用

Sitecore.Caching.CacheManager.ClearSecurityCache(userName);
此方法调用其他方法:

CacheManager.ClearUserProfileCache(userName);
CacheManager.ClearIsInRoleCache(userName);
CacheManager.ClearAccessResultCache(userName);

因此,从理论上讲,它应该可以满足您的需要,但我还没有在实践中对此进行确认。

这会清除缓存,但我不确定新角色/配置文件是否会再次添加并在上下文中可用。一次试错应该得出结论;)