我需要从SPGroup中检索所有的SPUser。不幸的是,该组可能包含Active Directory组,因此简单的SPGroup.Users是不够的(我只需要为AD组获取一个SPUser,并将IsDomainGroup属性设置为true)。
有没有人知道如何获得所有SPUser的列表,包括SPGroup中包含的任何Active Directory组?有没有SPGroup.ContainsCurrentUser的替代方法可以接受SPUser参数?
发布于 2010-08-12 21:48:23
基于blog post I found,我编写了以下代码:
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;
}
}我不喜欢我必须模拟每个用户的事实,并且这段代码将只查找已经导入到SharePoint中的AD用户(因此为他们存在一个SPUser ),但这对我来说已经足够了。
发布于 2010-08-12 19:10:36
不幸的是,情况可能并不是AD组的每个成员在站点中都有相应的SPUser对象(还没有)。
在此场景中,我将枚举活动目录组的所有成员,并使用SPWeb的EnsureUser()方法强制它们进入站点,该方法返回一个SPUser,如果站点中不存在该all,则创建一个新成员。
有关枚举active directory成员的指南,请参阅Get List of Users From Active Directory In A Given AD Group。
https://stackoverflow.com/questions/3466929
复制相似问题