为啥 Sitecore 创建具有所有 Extranet 角色的虚拟用户?
Posted
技术标签:
【中文标题】为啥 Sitecore 创建具有所有 Extranet 角色的虚拟用户?【英文标题】:Why Sitecore create virtual users with all extranet roles?为什么 Sitecore 创建具有所有 Extranet 角色的虚拟用户? 【发布时间】:2013-03-07 15:55:37 【问题描述】:我不确定 Sitecore 6.6 更新 3 中的 BuildVirtualUser
方法行为
我有以下代码:
bool isAuthenticated = true;
string userName = string.Format("0\\1", "extranet", user.Login);
SC.Security.Accounts.User virtualUser = SC.Security.Authentication.AuthenticationManager.BuildVirtualUser(userName, isAuthenticated);
但在BuildVirtualUser
方法调用 virtualUser 变量后包含所有外联网角色。
我希望我的以下代码应该将角色附加到用户。
foreach(var role in user.Permissions)
string domainRole = string.Format("0\\1", "extranet", "USER_EDIT");
if (SC.Security.Accounts.Role.Exists(domainRole))
virtualUser.RuntimeSettings.AddedRoles.Add(domainRole);
为什么会这样?我需要做什么来修复它?
更新 1
我发现第一次 BuildVirtualUser 创建具有 0 个角色的用户, 可以成功添加角色,但是在使用相同用户名注销和登录过程后,第一次添加的角色会自动附加到新用户。我认为这种行为不好,以防有人可以在外部系统中编辑用户角色。
【问题讨论】:
【参考方案1】:试试这个:
user.Roles.Add(Sitecore.Security.Accounts.Role.FromName(domainRole));
来自:
http://sdn.sitecore.net/upload/sitecore6/sc61keywords/security_api_cookbook_usletter.pdf
我不确定你的 for each 循环是什么,但你没有对每个“角色”做任何事情有点多余。
【讨论】:
sitecore 建议虚拟用户使用 RuntimeSettings【参考方案2】: SC.Security.Accounts.User virtualUser = SC.Security.Authentication.AuthenticationManager.BuildVirtualUser(userName, true);
virtualUser.RuntimeSettings.AddedRoles.Clear();
virtualUser.Roles.RemoveAll();
此代码有助于动态更新用户角色。 但我仍然不明白为什么要为虚拟用户提供站点核心缓存角色。
【讨论】:
sdn.sitecore.net/Forum/ShowPost.aspx?postid=42524 这可能会有所帮助,了解为什么 sitecore 正在缓存 sitecore 家伙说这是为了支持性能:/。 你好。我从现有的 Sitecore 用户(使用相同的凭据)创建了一个虚拟用户,我的问题是,即使我注销该虚拟用户并再次登录,它仍然被识别为虚拟用户。如果我手动清除浏览器中的所有 cookie,它就不再存在了,但是从代码中它就不起作用了。有谁知道为什么?谢谢。以上是关于为啥 Sitecore 创建具有所有 Extranet 角色的虚拟用户?的主要内容,如果未能解决你的问题,请参考以下文章