C# 在 sharepoint 中按组获取用户
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/325007/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
get users by group in sharepoint
提问by Adyt
can anyone show me how to get the users within a certain group using sharepoint?
谁能告诉我如何使用 sharepoint 获取某个组中的用户?
so i have a list that contains users and or groups. i want to retrieve all users in that list. is there a way to differentiate between whether the list item is a group or user. if its a group, i need to get all the users within that group.
所以我有一个包含用户和/或组的列表。我想检索该列表中的所有用户。有没有办法区分列表项是组还是用户。如果它是一个组,我需要获取该组内的所有用户。
im using c#, and im trying to do thins by making it a console application.
我正在使用 c#,并且我试图通过将其设为控制台应用程序来进行精简。
im new to sharepoint and im really jumping into the deep end of the pool here, any help would be highly appreciated.
我是 sharepoint 的新手,我真的跳进了游泳池的深处,任何帮助将不胜感激。
cheers..
干杯..
采纳答案by Pedrin
The first thing you need to know is that when you have a list with a User / Group field you must be aware of its type. When you have one user or group within the item value, the field type is SPFieldUserValue. However, if the field has multiple user / group selection the field type is SPFieldUserValueCollection.
I'll assume that your field allows a single user / group selection and you already has the following objects:
您需要知道的第一件事是,当您有一个包含用户/组字段的列表时,您必须了解它的类型。当项目值中有一个用户或组时,字段类型为 SPFieldUserValue。但是,如果字段有多个用户/组选择,则字段类型为 SPFieldUserValueCollection。
我假设您的字段允许单个用户/组选择,并且您已经拥有以下对象:
SPSite site;
SPWeb web;
SPListItem item;
Now, we'll check the field value for a user / group and retrieve a list of users, independant of which kind it is (the field's name is "Users").
现在,我们将检查用户/组的字段值并检索用户列表,无论它是哪种类型(该字段的名称是"Users")。
SPFieldUserValue usersField = new SPFieldUserValue(mainWeb, item["Users"].ToString());
bool isUser = SPUtility.IsLoginValid(site, usersField.User.LoginName);
List<SPUser> users = new List<SPUser>();
if (isUser)
{
// add a single user to the list
users.Add(usersField.User);
}
else
{
SPGroup group = web.Groups.GetByID(usersField.LookupId);
foreach (SPUser user in group.Users)
{
// add all the group users to the list
users.Add(user.User);
}
}
I hope it helps you.
我希望它能帮助你。
Tks,
Pedro José Batista
Tks,
佩德罗·何塞·巴蒂斯塔
回答by Scott Brickey
note: an SPUser object can also be an AD Group (that is to say, an SPUser object might exist for "DOMAIN\Domain Users"... which is why the SPUser object also contains the property IsDomainGroup.
注意:SPUser 对象也可以是 AD 组(也就是说,SPUser 对象可能存在于“DOMAIN\Domain Users”...这就是 SPUser 对象还包含属性 IsDomainGroup 的原因。
From this information you can start to traverse through AD groups using the SPPrincipalInfo objects... however it's not always pleasant.
根据这些信息,您可以开始使用 SPPrincipalInfo 对象遍历 AD 组……但是这并不总是令人愉快。
One thing worth keeping in mind is that the SPGroup object includes the ContainsCurrentUser property which can traverse AD groups... this assumes you've got an SPGroup object to work from, however.
值得记住的一件事是,SPGroup 对象包括可以遍历 AD 组的 ContainsCurrentUser 属性……但是,这假设您有一个可以使用的 SPGroup 对象。
Enjoy.
-Scott
享受。
-斯科特
回答by Sergey Turin
This is better to use web.SiteGroups
instead of web.Groups
as a group might be inherited by that site.
这更好地使用,web.SiteGroups
而不是web.Groups
因为该站点可能会继承一个组。
回答by user874163
private bool IsMember()
{
bool isMember;
SPSite site = new SPSite(SiteURL);
SPWeb web = site.OpenWeb();
isMember = web.IsCurrentUserMemberOfGroup(web.Groups["GroupName"].ID);
web.Close();
site.Close();
return isMember;
}