您可以使用该方法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 执行查询。