为啥 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 角色的虚拟用户?的主要内容,如果未能解决你的问题,请参考以下文章

您如何设置安全性以便用户只能在 Sitecore 中查看/编辑他们的项目?

Sitecore 登录所需的最低角色和访问权限

Sitecore TDS包与Sitecore包

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

Sitecore 以编程方式比较项目版本

如何在 sitecore 中获取媒体项目详细信息?