2009-06-30 81 views
15

如何檢查用戶(而不是當前登錄的用戶)是否爲某個組的成員?試圖從他不是成員的組中檢索用戶會導致SPException,因此檢查null是不可能的。Sharepoint:檢查用戶是否爲組的成員

那麼你會如何解決這個問題。目前,我考慮在SPGroup.Users.XML字符串中搜索用戶名,或者遍歷所有組成員並檢查登錄名。

更新: 我忘了提及,我想避免使用異常處理來檢查用戶的成員資格。

回答

6

我已經通過使用LINQ編寫擴展方法來完成此操作。 SPGroup從SPPrincipal繼承,所以你應該能夠通過將它傳遞給principal參數:

public static bool Contains(this SPRoleAssignmentCollection rac, SPPrincipal principal) 
{ 
    XElement racXml = XElement.Parse(rac.Xml); 
    return racXml.Elements("permission").Any(vw => (int)vw.Attribute("memberid") == principal.ID); 
} 
1

您是否嘗試過使用RunWithElevatedPrivileges

SPSecurity.RunWithElevatedPrivileges(delegate() 
     { 
      //put your code here to get the group and test for the user 
     }); 
+0

不,這不會改變任何東西。索引器仍然會引發異常。 – Flo 2009-06-30 15:00:30

+3

這應該是一個評論,而不是回答...你'回答'與另一個問題。 – trgraglia 2011-10-27 12:52:59

4

幾種方法。 SharePoint組具有一個選項,只允許組所有者查看成員詳細信息或允許每個人查看成員詳細信息。如果每個人都被允許,你不會得到安全限制,否則你需要RunWithElevatedPrivileges,並且一定要得到一個SPSite的新實例。

雖這麼說,下面是選項:

private Boolean isUserInGroup(SPGroup oGroupToTestFor,String sUserLoginName) 
    { 
     Boolean bUserIsInGroup = false; 
     try 
     { 
      SPUser x = oGroupToTestFor.Users[sUserLoginName]; 
      bUserIsInGroup = true; 
     } 
     catch (SPException) 
     { 
      bUserIsInGroup = false; 
     } 
     return bUserIsInGroup; 

    } 

另一種方式是

private Boolean isUserInGroup(SPGroup oGroupToTestFor, String sUserLoginName) 
    { 
     Boolean bUserIsInGroup = false; 

      SPUser oUser =null; 
      try{ 
       oUser = SPContext.Current.Web.AllUsers[sUserLoginName]; 
       } 
      catch{} 
      if(oUser!=null){ 
      foreach (SPUser item in oGroupToTestFor.Users) 
      { 
       if (item.UserToken == oUser.UserToken) 
       { 
        bUserIsInGroup = true; 
        break; 
       }      
      } 
      } 

     return bUserIsInGroup; 

    } 
+2

請注意,AllUsers集合可能不包含成員,除非用戶瀏覽了該網站。 – 2009-10-06 21:14:05

0

爲了使SPSecurity.RunWith ..工作,你需要有一個新的實例SPSite和/或SPWeb對象,並且不使用上下文,否則它將不起作用。

您是否有要使用的SPUser對象?如果是這樣,您可以使用SPUser.Groups集合。

17

創建Extension class for SPUser and static method

public static class SPUserExtension { 
    public static bool InGroup(this SPUser user, SPGroup group) 
     { 
     return user.Groups.Cast<SPGroup>() 
      .Any(g => g.ID == group.ID); 
     } 
    } 
} 

然後調用這個方法您的SPUser對象:

SPUser user; 
SPGroup group; 
//... 
bool isMember = user.InGroup(group); 
0

我已經實現了一種簡單的方法來檢查特定用戶是否存在於特定的SharePoint組中。 linq在SPUser對象上的簡單語句。

bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower()); 

查找SharePoint Core Solutions的詳細帖子。

相關問題