Add users of an AD Group to the SharePoint Site
Recently, I had a requirement from my Customer which required to add an AD groups’s user to the SharePoint site. As you know, if you try to add the SharePoint group directly to the SharePoint site, it would simply create the group but wouldn’t add the users. So you need to explicitly add users to the site. Customer wanted me to provide some utility that could automate this process.
The key to this solution involves Querying the AD group to get the users that belong to the AD group and then adding these users to the SharePoint Site. To ge the list of the users from AD, Asp.Net provides the namespace - System.DirectoryServices. The namespace exposes a number of classes that allow you to query the AD. BElow is the sample code to get a list of users from AD:
1: public static List<UserInfo> PopulateUserInfoFromADGroup(string GroupId)
2: {
3: //PLease set the GC or LDAP server name
4: string domain = "GC://corp.emailserver.com";
5: System.DirectoryServices.DirectoryEntry entry = new DirectoryEntry(domain);
6:
7: DirectorySearcher adSearcher = new DirectorySearcher(entry);
8: adSearcher.SearchScope = SearchScope.Subtree;
9:
10: // Please remember to have change the below string
11: // OU=Distribution Lists,DC=domain,DC=corp,DC=microsoft,DC=com
12: // The string was for our domain so you need to change the domain string to your domain string
13: //It mostly is of the format abc.abc.abc.com so have four DC variables with value as
14: // DC=abc,DC=abc,DC=abc,DC=com
15: adSearcher.Filter = "(&(objectClass=user)(memberOf=CN=" + GroupId + ",OU=Distribution Lists,DC=domain,DC=corp,DC=microsoft,DC=com))";
16: SearchResultCollection oResult = adSearcher.FindAll();
17:
18: List<UserInfo> userList = new List<UserInfo>();
19:
20: if (oResult != null)
21: {
22: foreach (SearchResult result in oResult)
23: {
24: UserInfo user = new UserInfo();
25: ResultPropertyValueCollection propColl = result.Properties["sAMAccountName"];
26: ResultPropertyValueCollection propCollName = result.Properties["displayname"];
27: ResultPropertyValueCollection propCollMail = result.Properties["mail"];
28: ResultPropertyValueCollection propCollDomain = result.Properties["msds-SourceObjectdn"];
29: for (int i = 0; i < propColl.Count; i++)
30: {
31: user.UserEmail = propCollMail[i].ToString();
32: user.userLoginName = propColl[i].ToString();
33: user.USerName = propCollName[i].ToString();
34:
35: //Get the Domain Name
36: string DomainName = propCollDomain[i].ToString();
37: Char comma = ',';
38: string[] test = DomainName.Split(comma);
39: user.DomainName = test[2].Remove(0, 3);
40: userList.Add(user);
41: }
42: }
43: }
44:
45: return userList;
46: }
After you have got the list of users from AD, you can simply add the Users to the SharePoint site.
1: static void Main(string[] args)
2: {
3: string strSiteCollectionUrl, strADGroupName;
4:
5: Console.WriteLine("Enter Site Collection Url: (Press Enter after entering the url)");
6: strSiteCollectionUrl = Console.ReadLine();
7:
8:
9: Console.WriteLine("Enter Friendly AD Group Name: (Press Enter after entering the Name)");
10: strADGroupName = Console.ReadLine();
11:
12: List<UserInfo> userList = new List<UserInfo>();
13: userList = PopulateUserInfoFromADGroup(strADGroupName);
14:
15: SPSite site = new SPSite(strSiteCollectionUrl);
16: SPWeb web = site.OpenWeb();
17:
18: SPGroup AddUserGroup;
19: //Check if Group Exists
20:
21:
22: foreach (UserInfo user in userList)
23: {
24: SPRoleDefinitionCollection roleDefinitions = web.RoleDefinitions;
25: SPRoleAssignmentCollection roleAssignments = web.RoleAssignments;
26: SPRoleAssignment roleAssignment = new SPRoleAssignment(user.DomainName + "\\" + user.userLoginName, user.UserEmail, user.USerName, "");
27: SPRoleDefinitionBindingCollection roleDefBindings = roleAssignment.RoleDefinitionBindings;
28: roleDefBindings.Add(roleDefinitions.GetByType(SPRoleType.Contributor));
29: roleAssignments.Add(roleAssignment);
30: SPUser newUser = web.SiteUsers[user.DomainName + "\\" + user.userLoginName];
31: try
32: {
33: AddUserGroup = web.SiteGroups[strADGroupName];
34: }
35: catch
36: {
37: web.SiteGroups.Add(strADGroupName,newUser,newUser,"");
38: }
39: AddUserGroup = web.SiteGroups[strADGroupName];
40: AddUserGroup.AddUser(user.DomainName + "\\" + user.userLoginName, user.UserEmail, user.USerName, "");
41: }
42:
43: }
44:
45: /// <summary>
46: /// Class with User details
47: /// </summary>
48: public class UserInfo
49: {
50: private string _userLoginName;
51:
52: public string userLoginName
53: {
54: get { return _userLoginName; }
55: set { _userLoginName = value; }
56: }
57:
58: private string _userName;
59:
60: public string USerName
61: {
62: get { return _userName; }
63: set { _userName = value; }
64: }
65:
66: private string _userEmail;
67:
68: public string UserEmail
69: {
70: get { return _userEmail; }
71: set { _userEmail = value; }
72: }
73:
74: private string _domainName;
75:
76: public string DomainName
77: {
78: get { return _domainName; }
79: set { _domainName = value; }
80: }
81:
82:
83:
84: }
Comments
Anonymous
September 29, 2008
PingBack from http://www.easycoded.com/add-users-of-an-ad-group-to-the-sharepoint-site/Anonymous
October 02, 2008
Interesante articulo que nos explica una forma (via desarrollo) para integrar los usuarios de gruposAnonymous
January 06, 2009
The comment has been removed