0

我不确定Sitecore 6.6 更新 3BuildVirtualUser中的方法行为

我有以下代码:

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

4

2 回答 2

1

试试这个:

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

从:

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

我不确定你的 for each 循环是什么,但你没有对每个“角色”做任何事情有点多余。

于 2013-03-08T09:26:19.177 回答
1
 SC.Security.Accounts.User virtualUser = SC.Security.Authentication.AuthenticationManager.BuildVirtualUser(userName, true);
            virtualUser.RuntimeSettings.AddedRoles.Clear();
            virtualUser.Roles.RemoveAll();

此代码有助于动态更新用户角色。但我仍然不明白为什么要为虚拟用户提供站点核心缓存角色。

于 2013-03-09T09:59:00.963 回答