0

SPUserからすべてを取得する必要がありますSPGroup。残念ながら、グループには Active Directory グループが含まれている可能性があるため、単純なSPGroup.Usersものでは十分ではありません (プロパティを true に設定しSPUserて、AD グループに対して単一のものを取得するだけです)。IsDomainGroup

SPUserに含まれる Active Directory グループに降りて、すべての のリストを取得する方法を知っている人はいSPGroupますか? パラメータSPGroup.ContainsCurrentUserを取る代替手段はありますか?SPUser

4

2 に答える 2

1

見つけたブログ投稿に基づいて、次のコードを作成しました。

private static List<SPUser> ListUsers(SPWeb web, SPPrincipal group)
{
    try
    {
        web.Site.CatchAccessDeniedException = false;
        var users = new List<SPUser>();
        foreach(SPUser user in web.SiteUsers)
        {
            using(var userContextSite = new SPSite(web.Site.ID, user.UserToken))
            {
                try
                {
                    using (var userContextWeb = userContextSite.OpenWeb(web.ID))
                    {
                        try
                        {
                            if (userContextWeb.SiteGroups[group.Name]
                                .ContainsCurrentUser)
                                    users.Add(user);
                        }
                        catch (SPException)
                        {
                            // group not found, continue
                        }
                    }
                }
                catch(UnauthorizedAccessException)
                {
                    // user does not have right to open this web, continue
                }
            }
        }
        return users;
    }
    finally
    {
        web.Site.CatchAccessDeniedException = true;
    }
}

すべてのユーザーを偽装する必要があるという事実は好きではありません。このコードは、SharePoint に既にインポートされている AD ユーザーのみを検索します (そのため、AD ユーザーにはSPUser存在します) が、それで十分です。

于 2010-08-12T13:48:22.843 に答える
0

残念ながら、AD グループのすべてのメンバーが対応する SPUser オブジェクトをサイト内に (まだ) 持っているとは限りません。

このシナリオでは、Active Directory グループのすべてのメンバーを列挙し、SPWeb のEnsureUser()メソッドを使用してそれらを強制的にサイトに挿入します。このメソッドは を返し、SPUserサイトにまだ存在しない場合は新しいメンバーを作成します。

Active Directoryメンバーの列挙に関するガイダンスについては、Get List of Users From Active Directory In A Given AD Group を参照してください。

于 2010-08-12T11:10:35.657 に答える