[英]Getting members of an AD domain group using Sharepoint API
在我的Sharepoint代碼中,我通過以下方式顯示所有已定義用戶的列表:
foreach (SPUser user in SPContext.Current.Web.AllUsers)
{
...
}
最重要的是,我可以將域安全組添加到Sharepoint組(如訪問者),從而一次添加許多用戶(更簡單的管理)。 但是我的代碼在第一次登錄之前至少沒有看到這些用戶(如果他們有足夠的權限)。 在這種情況下,我只能看到域安全組SPUser
對象實例,其IsDomainGroup
設置為true
。
是否可以通過Sharepoint獲取域組成員而無需借助Active Directory查詢(這是我寧願避免的,因為您可能需要足夠的權限來執行此類操作=更多管理:Sharepoint權限+ AD權限)。
您可以使用方法SPUtility.GetPrincipalsInGroup
( MSDN )。
除string input
,所有參數都是自解釋的, 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);
請注意,此方法不能解析嵌套的安全組。 此外,執行用戶需要在當前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執行查詢。
我建議你直接查詢Active Directory。 您正在花費大量精力嘗試讓SharePoint為您調用AD。 每個具有域用戶訪問權限的帳戶都應該能夠查詢嵌套在SharePoint中的AD組。 我會去消息來源。
這樣您就不必擔心瀏覽用戶權限或其他任何問題。 在我看來,嘗試通過SharePoint代理這一點只會讓你的生活變得更加困難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.