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

时间:2013-03-07 15:55:37

标签: sitecore sitecore6

我不确定 Sitecore 6.6 update 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变量包含所有Extranet角色。 我希望只有我的以下代码才能将角色附加到用户。

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个角色的用户, 可以成功添加角色,但在具有相同用户名的注销和登录过程之后,首次自动附加到新用户时添加的角色。在我看来,如果有人可以在外部系统中编辑用户角色,这个行为就不好了。

2 个答案:

答案 0 :(得分:1)

试试这个:

user.Roles.Add(Sitecore.Security.Accounts.Role.FromName(domainRole));

从:

http://sdn.sitecore.net/upload/sitecore6/sc61keywords/security_api_cookbook_usletter.pdf

我不确定每个循环的内容是什么,但是对于每个“角色”都没有做任何事情都是多余的。

答案 1 :(得分:1)

 SC.Security.Accounts.User virtualUser = SC.Security.Authentication.AuthenticationManager.BuildVirtualUser(userName, true);
            virtualUser.RuntimeSettings.AddedRoles.Clear();
            virtualUser.Roles.RemoveAll();

此代码有助于动态更新用户角色。 但我仍然不明白为什么sitecore缓存虚拟用户角色。