如何檢查用戶(而不是當前登錄的用戶)是否爲某個組的成員?試圖從他不是成員的組中檢索用戶會導致SPException,因此檢查null是不可能的。Sharepoint:檢查用戶是否爲組的成員
那麼你會如何解決這個問題。目前,我考慮在SPGroup.Users.XML字符串中搜索用戶名,或者遍歷所有組成員並檢查登錄名。
更新: 我忘了提及,我想避免使用異常處理來檢查用戶的成員資格。
如何檢查用戶(而不是當前登錄的用戶)是否爲某個組的成員?試圖從他不是成員的組中檢索用戶會導致SPException,因此檢查null是不可能的。Sharepoint:檢查用戶是否爲組的成員
那麼你會如何解決這個問題。目前,我考慮在SPGroup.Users.XML字符串中搜索用戶名,或者遍歷所有組成員並檢查登錄名。
更新: 我忘了提及,我想避免使用異常處理來檢查用戶的成員資格。
我已經通過使用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);
}
您是否嘗試過使用RunWithElevatedPrivileges?
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//put your code here to get the group and test for the user
});
幾種方法。 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;
}
請注意,AllUsers集合可能不包含成員,除非用戶瀏覽了該網站。 – 2009-10-06 21:14:05
爲了使SPSecurity.RunWith ..工作,你需要有一個新的實例SPSite和/或SPWeb對象,並且不使用上下文,否則它將不起作用。
您是否有要使用的SPUser對象?如果是這樣,您可以使用SPUser.Groups集合。
創建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);
我已經實現了一種簡單的方法來檢查特定用戶是否存在於特定的SharePoint組中。 linq在SPUser對象上的簡單語句。
bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());
查找SharePoint Core Solutions的詳細帖子。
不,這不會改變任何東西。索引器仍然會引發異常。 – Flo 2009-06-30 15:00:30
這應該是一個評論,而不是回答...你'回答'與另一個問題。 – trgraglia 2011-10-27 12:52:59