我需要从SPUser
检索所有SPGroup
。不幸的是,该组可能包含Active Directory组,因此简单的SPGroup.Users
是不够的(我只为AD组获得一个SPUser
,IsDomainGroup
属性设置为true )。
有没有人知道如何获取所有SPUser
的列表,降序到SPGroup
中包含的任何Active Directory组?是否有SPGroup.ContainsCurrentUser
替代SPUser
参数?
答案 0 :(得分:1)
基于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
),但这样做很好对我来说足够了。
答案 1 :(得分:0)
不幸的是,可能的情况是并非AD组中的每个成员都在站点中都有相应的SPUser对象。
在这种情况下,我将枚举活动目录组的所有成员,并使用SPWeb的EnsureUser()
方法强制它们进入站点,该方法返回SPUser
,并创建一个新的{{1}}如果它不存在于网站中。
有关枚举活动目录成员的指导,请参阅Get List of Users From Active Directory In A Given AD Group。