Sitecore 6 是不是可以在已登录时更改虚拟用户的角色?

Posted

技术标签:

【中文标题】Sitecore 6 是不是可以在已登录时更改虚拟用户的角色?【英文标题】:Sitecore 6 Is it possible to change roles for virtual user when already logged in?Sitecore 6 是否可以在已登录时更改虚拟用户的角色? 【发布时间】:2013-04-10 13:43:15 【问题描述】:

Sitecore 6 中是否可以在已登录的情况下更改虚拟用户的角色?

我想更改已登录系统的虚拟用户的角色,但看起来 Sitecore 忽略了它。我可以清除角色并添加一个新角色,但所有旧角色仍然附加到用户。 我想我应该重新登录用户,但对我来说不是这样。

virtualUser.RuntimeSettings.AddedRoles.Clear();
virtualUser.Roles.RemoveAll();
if (permissions != null && permissions.Any())

    foreach (var role in permissions.Where(d=>!string.IsNullOrEmpty(d.Type)))
    
        string domainRole = string.Format("0\\1", "extranet", role.Type);
        if (SC.Security.Accounts.Role.Exists(domainRole))
        
            virtualUser.RuntimeSettings.AddedRoles.Add(domainRole);
        
    

【问题讨论】:

【参考方案1】:

你可以尝试使用

Sitecore.Caching.CacheManager.ClearSecurityCache(userName);

这个方法调用另一个方法:

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

所以理论上它应该做你需要的,但我还没有在实践中证实它。

【讨论】:

这会清除缓存,但我不确定新角色/配置文件是否再次添加并在上下文中可用。反复试验应该得出结论;)【参考方案2】:

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

【讨论】:

以上是关于Sitecore 6 是不是可以在已登录时更改虚拟用户的角色?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Sitecore 创建具有所有 Extranet 角色的虚拟用户?

Sitecore - 以编程方式清除用户的缓存

如何查看 sitecore 6 中的所有归档项目

如果sitecore中的先前版本没有更改,如何以编程方式删除新创建的项目版本

Sitecore 8 用户访问权限

Sitecore 6 中的用户价值查找?