2013-08-21 48 views
0

錯誤1:發生操作錯誤。UserPrincipal的錯誤Getauthorizationgroups

錯誤2:嘗試檢索授權組時,發生錯誤 (110)。

public static bool CheckGroupMembership(string userID, string groupName, string domain) 
{ 
    bool isMember = false; 

    // Get an error here, so then I use my username/password and it works... 
    PrincipalContext ADDomain = new PrincipalContext(ContextType.Domain, domain); 

    UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(ADDomain, userID); 

    PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetAuthorizationGroups(); //<-- Error is here: 

    foreach (Principal oResult in oPrincipalSearchResult) 
    { 
     if (oResult.Name.ToLower().Trim() == groupName.ToLower().Trim()) 
     { 
      isMember = true; 
     } 
    } 
    return isMember; 
} 

這當我在同一臺機器上調試的所有作品,當我從遠程服務器拉起網頁它只是失敗。

回答

0

這是我做的。

因爲我想要的DLL保持seporated和獨立從SharePoint,我在SharePoint呼籲需要此方法添加了這個...

 SPSecurity.RunWithElevatedPrivileges(delegate() 
     { 
      .... method goes here .... 
     }); 

在DLL文件被調用我加入這個:

private static bool UserHasPermisions(string userAccount, List<string> list) 
    { 
     bool userHasPermisions = true; 

     if (list != null && list.Count > 0) 
     { 
      userHasPermisions = false; 

      foreach (string item in list) 
      { 
       if (CheckGroupMembership(userAccount, item, "domain.local goes here...")) 
       { 
        userHasPermisions = true; 
       } 
      } 
     } 

     return userHasPermisions; 
    } 


public static bool CheckGroupMembership(string userID, string groupName, string domain) 
    { 
     bool isMember = false; 

     try 
     { 
      PrincipalContext ADDomain = GetPrincipalContext(); 

      UserPrincipal oUserPrincipal = UserPrincipal.FindByIdentity(ADDomain, userID); 

      PrincipalSearchResult<Principal> oPrincipalSearchResult = oUserPrincipal.GetAuthorizationGroups(); 

      foreach (Principal oResult in oPrincipalSearchResult) 
      { 
       if (oResult.Name.ToLower().Trim() == groupName.ToLower().Trim()) 
       { 
        isMember = true; 
       } 
      } 
     } 
     catch { } 

     return isMember; 
    } 

    private static PrincipalContext GetPrincipalContext() 
    { 
     string domain = "your local domain"; 
     string defaultOU = "DC=domain here,DC=local"; 
     string serviceUser = @"domain here\read only system account"; 
     string servicePassword = @"password goes here"; 

     PrincipalContext oPrincipalContext = new PrincipalContext(ContextType.Domain, domain, defaultOU, ContextOptions.SimpleBind, serviceUser, servicePassword); 

     return oPrincipalContext; 
    } 

我不喜歡走這條路,但爲了保持獨立的DLL我不得不。

相關問題