如何检查用户(而不是当前登录的用户)是否为某个组的成员?试图从他不是成员的组中检索用户会导致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