Click here to Skip to main content
Click here to Skip to main content

Adding Users to MOSS 2007 (SharePoint) Sites and Groups

, 24 Oct 2007
Rate this:
Please Sign up or sign in to vote.
This article describes a simple approach to adding users to MOSS 2007 (SharePoint)

Introduction

On a recent project with MOSS 2007, our team was required to create a unified user creation wizard that added user information to our database and then added the new user to a site/group in SharePoint. I dug around and found several sources that showed different ways of doing this task however I found that there is "more to the story". This article is about the approach I took, I hope it helps.

Using the Code

For the most part I am just going to list code fragments that I used in this project and talk briefly on what it is doing. It is pretty straight forward but there are subtle nuances. The approach I took was to first look for the user. If the user was already in the site collection then I just had to add her or him to the group. Otherwise I would have to add the user first to the site and then to the group. To start, you will need a reference to Microsoft.SharePoint:

using Microsoft.SharePoint;

The first function tries to return a user. You want to look first to make sure that the user is not currently in the site collection. In my code, if GetSPUser returns null then I know I have to create the user. You might want to handle exceptions differently. I have removed our exception handling routines for clarity.

private SPUser GetSPUser(string strLoginName, string strSiteURL)
{
    SPUser spReturn = null;
    SPSite spSite = null;
    SPWeb spWeb = null;
    try
    {
        //Open the ShrePoint site
        spSite = new SPSite(strSiteURL);
        spWeb = spSite.OpenWeb();
        
        //Check to see if user exists
        spReturn = spWeb.AllUsers[txbUser.Text];
    }
    catch(Exception)
    {
    }
    finally
    {
        spWeb.Close();
        spSite.Close();
    }

    return spReturn;
} 

Now if GetSPUser returns null then we have to create the user in the site collection. What's important here is the SPRoleAssignment and SPRoleDefinition. These should be set to create the user correctly. You have to tell SharePoint what access level the new user has. In this sample I am just using Contribute. You may want to make that a parameter or use a different level. Notice that I am not calling spWeb.Users.Add() as this is not needed. When you add the role definition, it will add the user as well.

private SPUser CreateUser(string strLoginName, string strEMail, 
    string strName, string strNotes, string strSiteURL)
{
    SPUser spReturn = null;
    SPSite spSite = null;
    SPWeb spWeb = null;

    try
    {
        //Open the SharePoint site
        spSite     = new SPSite(strSiteURL);
        spWeb     = spSite.OpenWeb();

        //Assign role and add user to site
        SPRoleAssignment spRoleAssignment = 
            new SPRoleAssignment(strLoginName, strEMail, strName, strNotes);
        //Using Contribute, might need high access
        SPRoleDefinition spSPRoleDefinition = 
            spWeb.RoleDefinitions["Contribute"]; 
    
        spRoleAssignment.RoleDefinitionBindings.Add(spSPRoleDefinition);
        spWeb.RoleAssignments.Add(spRoleAssignment);

        //Update site
        spWeb.Update();
        spReturn = spWeb.AllUsers[strLoginName];
    }
    catch(Exception)
    { 
    }
    finally
    {
        spWeb.Close();
        spSite.Close();
    }

    return spReturn;
}

Putting It All Together

Here is the code from the main function. Once again, open the site, get or create the user, then add to the group.

//Open Site
SPSite spSite = new SPSite(strSiteURL);
SPWeb spWeb = spSite.OpenWeb();

//Get or create user
SPUser spUser = GetSPUser(strLoginName, strSiteURL);

if(spUser == null)
{
    spUser = CreateUser(strLoginName, strEMail, strName, strNotes, strSiteURL);
}

//Open group
SPGroup spGroup = spWeb.SiteGroups[strGroup];

//Add and update group with new user
spGroup.AddUser(spUser.LoginName, spUser.Email, spUser.Name, 
    "Added by UserControl");
spGroup.Update();    

Points of Interest

In general, SharePoint MOSS 2007 is a very powerful platform but some things do not seem to work the way they should. I hope this helps anyone trying to automate the adding of users to sites or groups.

History

  • 24 October, 2007 - Initial version

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

Danimal(521)
Web Developer
United States United States
Dan Biscup is a MCAD working as a consultant. More to come....

Comments and Discussions

 
GeneralNice Article PinmemberPrabhu_Pappu21-Mar-13 0:30 
QuestionNice article Pinmemberasifiqbaljh29-Jan-13 0:05 
AnswerHere's all the code, that works. I need to change for final purpose, but you will be able to see missing pieces from orignal posting. PinmemberJ Keith Montz28-Oct-11 15:58 
GeneralUser cannot be found in GetSPUser() method Pinmemberjsnelders30-Dec-09 12:12 
GeneralError on trying to use this code Pinmemberafilho10-Nov-09 8:52 
QuestionGet All Users from Each Groups Pinmemberanwarul28-Jan-09 19:26 
Generalroleassignments... user does not exist or is not unique Pinmemberliamsheik7-Mar-08 9:47 
GeneralRe: roleassignments... user does not exist or is not unique PinmemberMrogr7-Jun-10 0:29 
GeneralCustomize List Webpart Pinmembersanong5-Nov-07 22:01 
GeneralA very nice Article PinmemberHemant.Kamalakar31-Oct-07 20:13 
GeneralGood Pinmemberrajantawate1(http//www.jhatak.com)31-Oct-07 11:08 
GeneralGreat Article !! PinmemberChirag R Darji25-Oct-07 21:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

| Advertise | Privacy | Mobile
Web01 | 2.8.140814.1 | Last Updated 24 Oct 2007
Article Copyright 2007 by Danimal(521)
Everything else Copyright © CodeProject, 1999-2014
Terms of Service
Layout: fixed | fluid