Sharepoint:检查用户是否为组成员
如何检查用户(不是当前登录的用户)是否是某个组的成员?试图从用户不是其成员的组中检索用户会导致SPEException,因此无法检查null 那么你将如何解决这个问题呢。目前,我考虑在SPGroup.Users.XML字符串中搜索用户名,或者迭代所有组成员并检查登录名 更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格 你试过使用吗Sharepoint:检查用户是否为组成员,sharepoint,usergroups,Sharepoint,Usergroups,如何检查用户(不是当前登录的用户)是否是某个组的成员?试图从用户不是其成员的组中检索用户会导致SPEException,因此无法检查null 那么你将如何解决这个问题呢。目前,我考虑在SPGroup.Users.XML字符串中搜索用户名,或者迭代所有组成员并检查登录名 更新: 我忘了提到我想避免使用异常处理来检查用户的成员资格 你试过使用吗 两条路。SharePoint组具有一个选项,该选项仅允许组所有者查看成员资格详细信息,或允许所有人查看成员资格详细信息。如果每一个都被允许,您将不会获得安全
两条路。SharePoint组具有一个选项,该选项仅允许组所有者查看成员资格详细信息,或允许所有人查看成员资格详细信息。如果每一个都被允许,您将不会获得安全限制,否则您需要以提升的权限运行,并确保在其中使用SPSite&SPWeb的新实例 据说,以下是一些选择:
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;
}
为了使SPSecurity.RunWith。。工作时,您需要有SPSite和/或SPWeb对象的新实例,并且不要使用上下文,否则它将无法工作
您有SPUser对象要使用吗?如果是这样,您可以只使用SPUser.Groups集合。我使用LINQ编写了一个扩展方法。SPGroup继承自SPPrincipal,因此您应该能够将其传递给
主体
参数:
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);
}
创建一个:
我实现了一种简单的方法来检查特定的SharePoint组中是否存在特定的用户。SPUser对象上带有linq的简单语句
bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());
bool userExsists=spUser.Groups.Cast().Any(g=>g.Name.ToLower()==spGroup.Name.ToLower());
在上找到详细的帖子。不,这不会改变任何事情。索引器仍然抛出异常。这应该是注释而不是答案。。。您用另一个问题“回答”了。谢谢您的解决方案。虽然我不知道你说的“SPrac”是什么意思,但我为SPGroup类编写了一个扩展方法,用于检查用户登录名的SPGroup.Users.Xml属性。很抱歉,查找并替换出错。现已修复。请注意,除非用户已浏览网站,否则AllUsers集合可能不包含该成员。为什么不使用oUser.ID而不是UserToken?
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 user;
SPGroup group;
//...
bool isMember = user.InGroup(group);
bool userExsists = spUser.Groups.Cast<SPGroup>().Any(g => g.Name.ToLower() == spGroup.Name.ToLower());