簡體   English   中英

使用Sharepoint API獲取AD域組的成員

[英]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.GetPrincipalsInGroupMSDN )。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM