如何检查某个用户(非当前登录用户)是否是特定组的成员?尝试从不是成员的组中检索用户会导致SPException异常,因此无法检查null。
那么你会如何解决这个问题呢?目前我考虑在SPGroup.Users.XML字符串中搜索用户的名称或迭代所有组成员并检查登录名称。
更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格。
如何检查某个用户(非当前登录用户)是否是特定组的成员?尝试从不是成员的组中检索用户会导致SPException异常,因此无法检查null。
那么你会如何解决这个问题呢?目前我考虑在SPGroup.Users.XML字符串中搜索用户的名称或迭代所有组成员并检查登录名称。
更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格。
创建一个 SPUser的扩展类和静态方法:
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);
我通过编写一个使用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);
}
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;
}
你尝试过使用RunWithElevatedPrivileges吗?
SPSecurity.RunWithElevatedPrivileges(delegate()
{
//put your code here to get the group and test for the user
});
我已经实现了一种简单的方法来检查特定用户是否存在于特定的SharePoint组中。使用SPUser对象上的简单linq语句。
bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());
在SharePoint核心解决方案上找到详细帖子。