16

私のSharepointコードでは、定義されたすべてのユーザーのリストを次の方法で表示します。

foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
    ...
}

重要な点は、ドメイン セキュリティ グループを SharePoint グループ (訪問者など) に追加して、一度に多くのユーザーを追加できることです (管理が簡単になります)。しかし、私のコードでは、少なくとも最初にログインするまで (十分な権限がある場合)、これらのユーザーは表示されません。この場合、 に設定されたドメイン セキュリティ グループSPUserオブジェクト インスタンスしか表示されません。IsDomainGrouptrue

Active Directory のクエリに頼らずに、Sharepoint を使用してドメイン グループ メンバーを取得することは可能ですか (そのような操作を実行するには十分な権限が必要なので、むしろ避けたいと思います = より多くの管理: Sharepoint 権限 + AD 権限)。

4

2 に答える 2

32

メソッドSPUtility.GetPrincipalsInGroup( MSDN ) を使用できます。

string inputセキュリティ グループの NT アカウント名であるを除いて、すべてのパラメータは自明です。

bool reachedMaxCount;
SPWeb web = SPContext.Current.Web;
int limit = 100;
string group = "Domain\\SecurityGroup";
SPPrincipalInfo[] users = SPUtility.GetPrincipalsInGroup(web, group, limit, out reachedMaxCount);

この方法では、ネストされたセキュリティ グループは解決されないことに注意してください。SPBasePermissions.BrowseUserInfoさらに、実行ユーザーは、現在の Web でのユーザー情報の参照権限 ( ) を持っている必要があります。

アップデート:

private void ResolveGroup(SPWeb w, string name, List<string> users)
{
    foreach (SPPrincipalInfo i in SPUtility.GetPrincipalsInGroup(w, name, 100, out b))
    {
        if (i.PrincipalType == SPPrincipalType.SecurityGroup)
        {
          ResolveGroup(w, i.LoginName, users);
        }
        else
        {
          users.Add(i.LoginName);
        }
    }
}

List<string> users = new List<string>();
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
  if (user.IsDomainGroup)
    {
      ResolveGroup(SPContext.Current.Web, user.LoginName, users);
    }
    else
    {
      users.Add(user.LoginName);
    }
}

編集:

[...] Active Directory クエリに頼る (このような操作を行うには十分な権限が必要になるため、これは避けたいと思います [...]

もちろんその通りですが、SharePoint は AD も検索する必要があります。そのため、AD への読み取りアクセス権を持つアプリケーション プール サービス アカウントが必要です。つまり、コードをプロセス アカウントに戻して実行すると、AD に対して安全にクエリを実行できるはずです。

于 2011-05-27T14:49:55.407 に答える
6

Active Directory に直接クエリを実行することをお勧めします。SharePoint にこの AD への呼び出しを行わせるために多くの労力を費やしています。ドメイン ユーザー アクセス権を持つすべてのアカウントは、SharePoint にネストされた AD グループに対してクエリを実行できる必要があります。私はただソースに行きます。

これにより、ユーザーのアクセス許可の参照などについて心配する必要がなくなります。私の意見では、SharePoint を介してこれをプロキシしようとすることは、あなたの人生をより困難にするだけです.

于 2011-05-28T22:22:58.453 に答える