IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SharePoint .NET Discussion :

Ajouter des éléments par Code c# sans être autorisé


Sujet :

SharePoint .NET

  1. #1
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut Ajouter des éléments par Code c# sans être autorisé
    Bonjour,

    J'explique mon problème.
    en fait j'ai une WebPart Sondage.
    n'importe quel utilisateur peut accéder à ce sondage.
    mais je doit enregistrer chaque utilisateur qui a effectue ce sondage.
    De coups dans le code c# j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    listEnregisItems = monSite.Lists[listeEnregistrement].Items;
                                    enregistrement = listEnregisItems.Add();
                                    enregistrement["Title"] = "Enregistrement";
                                    enregistrement["Sondage"] = titreSondage;
                                    enregistrement["Utilisateur"] = monSite.CurrentUser;
                                    enregistrement.Update();
    Mais puisque l'utilisateur est un simple user une erreur d'accé refusé chaque fois qu'un utilisateur fait le sondage.

    j'ai mis mon code entre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SPSecurity.RunWithElevatedPrivileges
    j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monSite.AllowUnsafeUpdates
    Mais toujours la même erreur!

    Merci pour votre aide j'espère que j'étais clair!

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    Salut,

    peux tu nous montrer le code que tu utiliser avec SPSecurity.RunWithElevatedPrivileges pour voir s'il n'y a pas d'erreur ? Ensuite, peux tu copier/coller le message d'erreur exact ?

  3. #3
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Merici!
    voilà le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SPSecurity.RunWithElevatedPrivileges(delegate()
                                {
                                    listEnregisItems = monSite.Lists[listeEnregistrement].Items;
                                    enregistrement = listEnregisItems.Add();
                                    enregistrement["Title"] = "Enregistrement";
                                    enregistrement["Sondage"] = titreSondage;
                                    enregistrement["Utilisateur"] = monSite.CurrentUser;
                                    enregistrement.Update();
                                });
    et pour l'exception elle s'affiche dans la page internet puisque c'est une WebPart "Accès refusé. Utilisateur actuel. Vous ête connecté en tant que Foulen.!

    mais voilà le message lors de debogage au niveau de "enregisrement.Update');:
    "Accès refusé. (Exception de HRESULT : 0x80070005 (E_ACCESSDENIED))"

    Merci pour votre aide

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    As-tu essayé de le faire en tant qu'administrateur pour voir si cela fonctionnait ? Je demande ca, parce qu'à première vue, je ne vois pas d'où peut provenir l'erreur, ton code me semble correct.

    Essaye un peu en ne mettant que le titre à jour pour voir si cela fonctionne ou non (en tant qu'admin et en tant que simple membre)

  5. #5
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Bonjour,

    en tant qu'admin je n'ai pas de souci, le code donne des bonnes resultat; mais je vais essayé en mettant à jour juste le titre avec un utilisateur normal!

    merci

  6. #6
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    c'est toujours la même erreur!!!!

  7. #7
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    J'ai peut être une idée. Je vais p'tet dire une connerie par contre, mais autant tenter.

    Selon moi, je pense que tu ouvres l'objet monsite avec les credential de simple utilisateur, donc quand tu récupères ta liste dans ton RunWithElevatedPrivileges, tu te retrouve créditer de tes droits de simples utilisateurs, ton update ne fonctionne donc pas. L'idée est d'ouvrir l'objet monsite DANS le RunWithElevatedPrivileges. Ce que je te conseille, pour tester, c'est d'encadrer tout le code de ta fonction par RunWithElevatedPrivileges juste histoire de voir si ca provient de la.

    Ensuite, si c'est ça on réflechira à une façon "sweet" de l'utiliser.

  8. #8
    Membre régulier
    Profil pro
    developpeur
    Inscrit en
    Février 2006
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : developpeur

    Informations forums :
    Inscription : Février 2006
    Messages : 69
    Points : 79
    Points
    79
    Par défaut
    Englobe ton SPSite, SPWeb dans le RunWithElevatedPrivilages

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SPSecurity.RunWithElevatedPrivileges(delegate()
                {
                using (SPSite site = new SPSite(""))
    using (SPWeb web = site.OpenWeb())
                {      
                        SPList list = web.Lists[properties.ListId];
              etc...
    }
    });
    voila

  9. #9
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    J'ai testé ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    sysToken = SPContext.Current.Site.SystemAccount.UserToken;
                SPSecurity.RunWithElevatedPrivileges(delegate()
                               {
                                   using (SPSite systemSite = new SPSite(SPContext.Current.Site.ID, sysToken))
                                   {
                                       using (SPWeb sysWeb = systemSite.OpenWeb(SPContext.Current.Web.ID))
                                       {
     
                                           int selected = radioButton.SelectedIndex;
                                               if (selected != -1)
                                           {
     
                                               if (pourcentage == null)
                                                   {
                               listEnregisItems = sysWeb.Lists[listeEnregistrement].Items;
     
                                                           enregistrement = listEnregisItems.Add();
                                                           enregistrement["Title"] = "Enregistrement";
                                                           enregistrement["Sondage"] = titreSondage;
                                                           enregistrement["Utilisateur"] = monSite.CurrentUser;
                                                           enregistrement.Update();
    Mais j'ai eu une autre erreur !
    "La validation de la sécurité de cette page n'est pas valide. Cliquez sur Précédente de votre navigateur et retentez l'opération."


  10. #10
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    Ouch,

    l'erreur de m****, j'ai bien galérer sur cette erreur moi. Ton code se trouve dans une page applicative ? Si oui, je pense qu'un FormDigest serait de bon aloi

    Si ton code est sur une page applicative, je pense bien que la dernière solution te conviendra ;-)

  11. #11
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    c'est quoi une page applicatif! moi je test ma webpart avant de livrer donc c'une composant webpart! qui contien seulement cette webpart!
    en tout cas merci bien je vais voir!

  12. #12
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    Salut,

    comment testes-tu cette WebPart ? J'imagine que tu as un site SharePoint de test où tu met ta WebPart et où test ?

    J'avais zappé que c'était une Webpart, du coup j'ai des doutes sur la troisième solution du lien que je t'ai filé ci-dessus... Dans ton cas, peut être que le AllowUnsafeUpdate pourrait t'aider...

  13. #13
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Très très très très grand merci!
    Vraiment tu est très gentil!
    Merci bien c'est résolu!

  14. #14
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    Simple curiosité : Tu as utilisé le AllowUnsafeUpdate pour résoudre ce problème ?

  15. #15
    Expert confirmé Avatar de Lapinpanda
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    3 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 230
    Points : 4 913
    Points
    4 913
    Par défaut
    Idée sans doute stupide.

    J'ai une WebPart personnalisé. Je l'ai testé en mode admin tout le long.
    Après avoir voulu tester un utilisateur "test" qui n'a pas les droits admin,
    j'ai rencontré l'erreur "Accès refusé".

    Pour la corriger, j'ai du rajouter des droits de lecture/écriture sur les dossiers que se sert SharePoint, enfin ma WebPart.

    Par exemple pour appeller une CSS je n'avais pas le droit de lecture de ce fichier avec un utilisateur "test"

    Il fallait rajouter l'autorisation sur le dossier(clic droit...etc )pour que cela fonctionne bien.

    Je sais pas si cela peut t'aider mais on sait jamais

  16. #16
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par s.sougnez Voir le message
    Simple curiosité : Tu as utilisé le AllowUnsafeUpdate pour résoudre ce problème ?
    Bon, à la fin c'est sysWeb.AllowUnsafeUpdates = true; qui a résolu le promblème ( malgrés que je le ecrit mais au dehors de " SPSecurity.RunWithElevatedPrivileges").

    Mais la chose la plus importante est !
    lorsque on utilise SPSecurity.RunWithElevatedPrivileges : il faut que tous les variables reliées par notre web ou notre site doivent être ré-instancié entre les balises de SPSecurity.RunWithElevatedPrivileges pour avoir tout les accès si non comme si on n'a rien fait!

    Merci une autre fois!

  17. #17
    Inactif  
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2009
    Messages : 137
    Points : 170
    Points
    170
    Par défaut
    Uep c'est ce que j'expliquais dans un de mes posts

    Content que ça fonctionne :p

  18. #18
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    395
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Juin 2008
    Messages : 395
    Points : 218
    Points
    218
    Par défaut
    Citation Envoyé par s.sougnez Voir le message
    Uep c'est ce que j'expliquais dans un de mes posts

    Content que ça fonctionne :p
    Oui mais je l'ai fait pour une et j'ai oublié une autre

    Merci bien s.sougnez!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/01/2013, 21h31
  2. [IP-2010] Ajouter des lignes à un tableau extensible sans code
    Par hamzaj dans le forum InfoPath
    Réponses: 3
    Dernier message: 04/10/2011, 15h28
  3. Ajouter des TextBox par code sur un Form
    Par ClubberGuy dans le forum VB 6 et antérieur
    Réponses: 13
    Dernier message: 05/05/2011, 15h47
  4. problème ajout d'éléments par le code
    Par xav2303 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/04/2009, 21h28
  5. ajouter des éléments a un select multiple sans effacer le contenu
    Par ziad251 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/05/2008, 15h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo