All'interno di una mia applicazione ho avuto la necessità di creare un nuovo sito Sharepoint, basato su un template qualsiasi, direttamente dal modello ad oggetti che Sharepoint stesso espone.
Dopo la creazione dovevo anche assegnare dei gruppi di base per i permessi di lettura, modifica e amministrazione del mio sito. Ecco il codice per fare tutto ciò:

SPWeb web = SPContext.Current.Web;


//creazione del sito figlio SPWebTemplate centroDocumenti = site.GetWebTemplates(web.Language)["BDR#0"];
SPWeb nuovoSito = web.Webs.Add("Nuovo", "Mio sito nuovo", "", web.Language, centroDocumenti, true, false);
nuovoSito.Navigation.UseShared = true;

//creo i gruppi nuovoSito.SiteGroups.Add("Admins", web.AssociatedOwnerGroup, null, "");
SPGroup admins = nuovoSito.SiteGroups["Admins"];
nuovoSito.SiteGroups.Add("Contributors", web.AssociatedOwnerGroup, null, "");
SPGroup contributors = nuovoSito.SiteGroups["Contributors"];
nuovoSito.SiteGroups.Add("Readers", web.AssociatedOwnerGroup, null, "");
SPGroup readers = nuovoSito.SiteGroups["Readers"];

//Associo i gruppi ai permessi del sito nuovoSito.Properties["vti_associateownergroup"] = admins.ID.ToString();
nuovoSito.Properties["vti_associatemembergroup"] = contributors.ID.ToString();
nuovoSito.Properties["vti_associatevisitorgroup"] = readers.ID.ToString();
nuovoSito.Properties["vti_associategroups"] = string.Format("{0};{1};{2}",
admins.ID.ToString(),
contributors.ID.ToString(),
readers.ID.ToString());
nuovoSito.Update();


L'ultima proprietà settata nell'esempio di codice permette la visualizzazione dei 3 gruppi sulla quick launch bar del nostro nuovo sito.