私のSharepointコードでは、次の方法で定義されたすべてのユーザーのリストを表示します。
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
...
}
大きな部分は、ドメインセキュリティグループをSharepointグループ(Visitorなど)に追加できるため、一度に多くのユーザーを追加できることです(より簡単な管理)。しかし、私のコードは、少なくともユーザーが初めてログインするまで(十分な権限がある場合)、それらのユーザーを認識しません。この場合、SPUser
がIsDomainGroup
に設定されているドメインセキュリティグループtrue
オブジェクトインスタンスのみが表示されます。
Sharepointを使用してドメイングループメンバーを取得することは可能ですか Active Directoryクエリに頼らずに(これは、そのような操作を実行するために十分な権限が必要になる可能性があるため、避けたいものです=より多くの管理:Sharepoint権限+ ADの権利)。
メソッドSPUtility.GetPrincipalsInGroup
( [〜#〜] msdn [〜#〜] )を使用できます。
セキュリティグループのNTアカウント名であるstring input
を除いて、すべてのパラメータは自明です。
bool reachedMaxCount;
SPWeb web = SPContext.Current.Web;
int limit = 100;
string group = "Domain\\SecurityGroup";
SPPrincipalInfo[] users = SPUtility.GetPrincipalsInGroup(web, group, limit, out reachedMaxCount);
この方法では、ネストされたセキュリティグループは解決されないことに注意してください。さらに、実行ユーザーは、現在のWebでユーザー情報の参照権限(SPBasePermissions.BrowseUserInfo
)を持っている必要があります。
更新:
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に対して安全にクエリを実行できるはずです。
ActiveDirectoryに直接クエリすることをお勧めします。 SharePointにこのADへの呼び出しを行わせるために多くの労力を費やしています。ドメインユーザーアクセス権を持つすべてのアカウントは、SharePointにネストしたADグループにクエリを実行できる必要があります。私はただソースに行きます。
これにより、ユーザー権限の参照などについて心配する必要がなくなります。私の意見では、SharePointを介してこれをプロキシしようとすると、あなたの生活がより困難になります。