我不确定 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);
}
}
为什么会这样?我需要做些什么来解决它?
我发现BuildVirtualUser第一次创建具有0个角色的用户, 可以成功添加角色,但在具有相同用户名的注销和登录过程之后,首次自动附加到新用户时添加的角色。在我看来,如果有人可以在外部系统中编辑用户角色,这个行为就不好了。
答案 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缓存虚拟用户角色。