none
Création de site SharePoint en non-administrateur RRS feed

  • Question

  •  

    Bonjour,

    Pour les besoins de mon application, il doit m'être possible d'ajouter un site à une collection de site en n'étant pas administrateur après avoir saisi tous les renseignements voulus au travers d'un page web que j'ai réalisée.

    Or, quand je ne suis pas administrateur, au niveau de "webPortail.Webs.Add" (cf. code suivant), je n'ai pas le droit d'accès => redirection vers la page acces denied!!!.
    J'ai aussi essayé en utilisant l'outil SharePOint "SPSecurity.RunWithElevatedPrivileges" mais ça ne marche pas non plus

    Le code est le suivant :

    Cette fonction est appelée au moment de la validation du formulaire par l'opérateur :


    protected void Create_Click(object sender, EventArgs e)
    {

    SPLongOperation Wait = new SPLongOperation(this.Page);
    Wait.Begin();

    Guid GuidSite = CreateSite();

    Wait.End("Default.aspx");

    }


    protected Guid CreateSite()
    {
    Guid GuidSite = Guid.Empty;

    try
    {

    SPWeb webPortail = SPContext.Current.Site.AllWebs[...];
    int CurrentUserID = webPortail.CurrentUser.ID;
    webPortail.Webs.Add(...);

    }

    catch (Exception ex)
    {
    Logger.Write(" Unexpected error : " + ex.Message, ...);
    }
    return GuidSite;
    }


    Si quelqu'un pouvait m'aider, je l'en remercie d'avance.

    Julien
    lundi 4 août 2008 08:35

Réponses

  • Bonjour

     

    Tout d'abord il existe une option dans MOSS via l'annuaire de site qui permet à des personnes non administrateur de créer des sites (self service), mais si vous n'avez que WSS, c'est raté.

     

    Pour votre bout de code et surtout le lancement en mode privilèges élevés, vous ne devez pas utiliser le contexte courant (SPContext).

     

    Dans votre méthode CreateSite, ajoutez un RunWithElevatedPrivileges et dedans remettez votre code avec cette différence :

     

    Code Snippet

    // rouvrez une collection avec le contexte avec privilèges élevés

    using (SPSite site = new SPSite(SPContext.Current.Site.ID)

    {

      SPWeb webPortail = site.AllWebs[...];

      ... (add & co)

     

      webPortail.Dispose();

    }

     

     

    Le code ci-dessus a été écrit à main levée, donc attention aux fautes de frappes.

     

    A+

    lundi 4 août 2008 12:54