0

Sitecore 6.6 update 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
 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 に答える
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 に答える