Sharepoint 如何列出SPGroup中的所有SPUser对象?
我需要从Sharepoint 如何列出SPGroup中的所有SPUser对象?,sharepoint,active-directory,spgroup,spuser,Sharepoint,Active Directory,Spgroup,Spuser,我需要从SPGroup检索所有SPUser。不幸的是,该组可能包含Active Directory组,因此一个简单的SPGroup.Users是不够的(对于AD组,我只需要一个SPUser,将IsDomainGroup属性设置为true) 有人知道如何获得所有SPUser的列表,并将其降序到SPGroup中包含的任何Active Directory组中吗?除了SPGroup.ContainsCurrentUser之外,是否还有其他方法可以接受SPUser参数?不幸的是,可能不是广告组的每个成员都
SPGroup
检索所有SPUser
。不幸的是,该组可能包含Active Directory组,因此一个简单的SPGroup.Users
是不够的(对于AD组,我只需要一个SPUser
,将IsDomainGroup
属性设置为true)
有人知道如何获得所有
SPUser
的列表,并将其降序到SPGroup
中包含的任何Active Directory组中吗?除了SPGroup.ContainsCurrentUser
之外,是否还有其他方法可以接受SPUser
参数?不幸的是,可能不是广告组的每个成员都在站点中有相应的SPUser对象(尚未)
在这个场景中,我将枚举active directory组的所有成员,并使用SPWeb的EnsureUser()
方法将它们强制放到站点中,该方法返回一个SPUser
,如果站点中不存在,则创建一个新成员
有关枚举active directory成员的指导,请参阅。基于,我编写了以下代码:
private static List<SPUser> ListUsers(SPWeb web, SPPrincipal group)
{
try
{
web.Site.CatchAccessDeniedException = false;
var users = new List<SPUser>();
foreach(SPUser user in web.SiteUsers)
{
using(var userContextSite = new SPSite(web.Site.ID, user.UserToken))
{
try
{
using (var userContextWeb = userContextSite.OpenWeb(web.ID))
{
try
{
if (userContextWeb.SiteGroups[group.Name]
.ContainsCurrentUser)
users.Add(user);
}
catch (SPException)
{
// group not found, continue
}
}
}
catch(UnauthorizedAccessException)
{
// user does not have right to open this web, continue
}
}
}
return users;
}
finally
{
web.Site.CatchAccessDeniedException = true;
}
}
私有静态列表用户(SPWeb web、SPPrincipal group)
{
尝试
{
web.Site.CatchAccessDeniedException=false;
var users=新列表();
foreach(web.SiteUsers中的SPUser用户)
{
使用(var userContextSite=new SPSite(web.Site.ID,user.UserToken))
{
尝试
{
使用(var userContextWeb=userContextSite.OpenWeb(web.ID))
{
尝试
{
if(userContextWeb.SiteGroups[group.Name]
.containerscurrentUser)
用户。添加(用户);
}
捕获(异常)
{
//找不到组,是否继续
}
}
}
捕获(未经授权的访问例外)
{
//用户无权打开此网站,是否继续
}
}
}
返回用户;
}
最后
{
web.Site.CatchAccessDeniedException=true;
}
}
我不喜欢这样一个事实,即我必须模拟每个用户,而这段代码将只查找已经导入SharePoint的广告用户(因此存在一个SPUser
),但这对我来说已经足够了