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

Développement Sharepoint .NET Discussion :

Access Denied : SPSecurity.RunWithElevatedPrivileges(Address Of GetItems)


Sujet :

Développement Sharepoint .NET

  1. #1
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut Access Denied : SPSecurity.RunWithElevatedPrivileges(Address Of GetItems)
    Salut à tous,

    Je suis la tuto pour développer une page applicative.

    J'ai copié le code (à la main pour comprendre ce que je fais) et j'ai une NullPointerException sur la boucle qui parcourt mes collections.

    J'ai ajouté un try catch qui ne fait rien dans le catch pour voir et je n'ai aucune collection qui s'affiche (donc, je suppose que le problème conerne toutes les collections).

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
                SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
    End Sub
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
           'Trouve tous les items créé par un utilisateur dans la ferme
    Private Sub GetItems()
                Dim CurrentUser As New SPFieldUserValue(Me.Web, Me.Web.CurrentUser.ID, Me.Web.CurrentUser.Name)
                Dim ResultList As New ArrayList
                Dim ThisFarm As SPFarm = SPFarm.Local
                Dim Service As SPWebService = ThisFarm.Services.GetValue(Of SPWebService)("")
                Dim WebApp As SPWebApplication = Nothing
                For Each WebAppl In Service.WebApplications
                    Dim SiteCollection As SPSite
                    Try
                        For Each SiteCollection In WebApp.Sites
                            Dim Web As SPWeb
                            For Each Web In SiteCollection.AllWebs
                                Dim Lists As SPListCollection = Web.Lists
                                Dim List As SPList
                                For Each List In Lists
                                    Dim Item As SPItem
                                    Try
                                        For Each Item In List.Items
                                            If Item(DropDownList1.SelectedValue).ToString = CurrentUser.ToString Then
                                                ResultList.Add(Item)
                                            End If
                                        Next
                                    Catch ex As Exception
                                        'S'il y a une erreur, ne rien faire et passer à la liste suivante
                                    End Try
                                Next
                            Next
                        Next
                    Catch ex As Exception
                        'S'il y a une erreur, ne rien faire et passer à la collection suivante
                    End Try
                Next
            End Sub
    Voici celui de la procédure :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    Private Sub GetItems()
        Dim CurrentUser As New SPFieldUserValue _
            (Me.Web, Me.Web.CurrentUser.ID, Me.Web.CurrentUser.Name)
     
        Dim ResultsList As New ArrayList()
     
        Dim ThisFarm As SPFarm = SPFarm.Local
        Dim Service As SPWebService = _
            ThisFarm.Services.GetValue(Of SPWebService)("")
     
        Dim WebApp As SPWebApplication
        For Each WebApp In Service.WebApplications
            Dim SiteCollection As SPSite
            For Each SiteCollection In WebApp.Sites
                Dim Web As SPWeb
                For Each Web In SiteCollection.AllWebs
                    Dim Lists As SPListCollection = Web.Lists
                    Dim List As SPList
                    For Each List In Lists
                        Dim Item As SPListItem
                        Try
                            For Each Item In List.Items
                                If Item(DropDownList1.SelectedValue).ToString() = _
                                    CurrentUser.ToString() Then
                                    ResultsList.Add(Item)
                                End If
                            Next Item
                        Catch exception As Exception
                            'Error in list. Move on to the next list.
                        End Try
                    Next List
                Next Web
            Next SiteCollection
        Next WebApp
        CreateResultsTable(ResultsList)
    End Sub


    J'ai essayé de voir la différence (à part mon try catch, hein!) mais je ne vois pas ce qui cloche.

    Est-ce que c'est le code du site qui a une faille ou bien est-ce que c'est moi qui ai mal tapé mon code?

    Si vous voulez bien jeter un oeil...

    Merci d'avance.

  2. #2
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Laissez tomber... C'est une faute de frappe...

    WebAppl => WebApp

  3. #3
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Bon, que ce post ne soit pas complètement inutile...

    Lorsque j'exécute ma page applicative, elle s'affiche (ouf, tout va bien!).

    La page est constituée d'une liste déroulante (DropDownList).

    Comme vous le voyez, je recherche tous les items créés par mon user dans toute ma ferme.

    Lorsque je change l'item de la liste déroulante, je déclenche ma méthode onSelectedItemChanged et là, j'ai une erreur :

    Accès refusé
    Vous n'avez pas les habilitations vous permettant d'accéder à cette page. Veuillez contacter l'administrateur du site pour y remédier.
    Il faut croire que je suis encore ennuyé avec des problèmes de droits. Je suis pourtant Farm Admin, Site Admin, Admin local de ma machine, j'ai lancé VS2010 en tant qu'admin...

    Quel droit peut-il me manquer?

    Dans le principe, je trouve ça curieux car au final, tout le monde devra pouvoir utiliser ma page applicative et pas seulement les admin...

    Merci d'avance.

  4. #4
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Voici ce qui s'affiche dans ma fenêtre d'exécution :
    L'attachement automatique au processus '[2440] w3wp.exe' sur l'ordinateur 'MONSERVEUR' a réussi.
    L'attachement automatique au processus '[6712] w3wp.exe' sur l'ordinateur 'MONSERVEUR' a réussi.
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans ArticleDeTable.dll
    Une exception de type 'System.Threading.ThreadAbortException' s'est produite dans ArticleDeTable.dll mais n'a pas été gérée dans le code utilisateur
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll
    Une exception de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll mais n'a pas été gérée dans le code utilisateur

  5. #5
    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
    Par défaut
    SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
    Cette méthode est bien, mais il faut que tu sache qu'il est de bonne pratique de limiter l'étendu de son utilisation.

    C'est à dire, que le code qu'elle execute soit bien délimité et que cela ne soit pas utilisé à toute les sauces.

    Tu as aussi la property web.AllowUnsafeUpdate que tu peux utiliser de cette façon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     web.AllowUnsafeUpdate = true;
    //code here
     web.AllowUnsafeUpdate = false;
    Pour tes pb de droits, je sais pas du tout par contre; ca me parle pas

  6. #6
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Ok, donc là, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    web.AllowUnsafeUpdate = true;
    SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
    web.AllowUnsafeUpdate = false;
    J'ai toujours mon Access Denied...

    Pour mes problèmes de droits, je parle de mon problème habituel qui fait que je ne peux pas accéder à mes bases de données Sharepoint, ou que je ne pas pas aller voir dans System Settins > Manage Features... Malgré que je sois Farm Admin, Site Admin, Admin du serveur...

  7. #7
    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
    Par défaut
    Citation Envoyé par Goupo Voir le message
    Ok, donc là, je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    web.AllowUnsafeUpdate = true;
    SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems)
    web.AllowUnsafeUpdate = false;
    J'ai toujours mon Access Denied...

    Pour mes problèmes de droits, je parle de mon problème habituel qui fait que je ne peux pas accéder à mes bases de données Sharepoint, ou que je ne pas pas aller voir dans System Settins > Manage Features... Malgré que je sois Farm Admin, Site Admin, Admin du serveur...

    Ah mais non je te demandai pas de combiner les deux

    En tout cas si on les combine cela serait dans l'autre sens

    web.AllowUnsafeUpdate
    ne sert que par exemple pour faire une MAJ d'une liste...item...etc.
    Parfois c'est nécessaire de l'utiliser, parfois.


    SPSecurity.RunWithElevatedPrivileges(AddressOf GetItems c'est pour executer du code qui dans un contexte l'utilisateur lambda n'aura pas les droits d'execution. Si tu es admin toi même; cela ne rajoute pas de privilège puisque tu as un contexte admin. C'est plus pour les autres Users

    Donc le pb ne vient pas de la; focalise toi sur autre chose pour trouver l'erreur

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut
    Une petite question : Ou tu héberges ta page applicative ?

  9. #9
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Honnêtement, je ne sais pas. Je suis allé voir dans "Site Actions > Manag Content and Structure" et aussi dans SPD > All Files. Je n'en ai pas vu trace...

    Dans Visual Studio, je fais un "Clic droit > Déployer" sur mon projet puis, j'exécute à partir de VS2010, je récupère l'URL, j'arrête l'exécution.

    Ensuite, quand j'utilise l'URL, j'accède bien à ma page applicative, même si le projet n'est plus en cours d'exécution dans VS2010 (donc, ma page est bien déployée).

    Mon URL ressemble à ceci :
    htétépé://{monserveur}/sites/{monsite}/_layouts/{dossier}/{page}.aspx

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut
    Est ce que tu te connectes avec le compte administrateur du pool SharePoint ?

  11. #11
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Je suis normalement administrateur de la ferme et du site. Je ne savais pas qu'il y avait un rôle d'administrateur pour le pool.

    Comment je peux vérifier si je suis administrateur de mon pool?

  12. #12
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut
    Sur IIS 6 ou 7, tu va vers les propriétés avancées de ton site SharePoint et tu cherches le nom du pool.
    Après tu va vers ton pool et tu regardes la propriété "Identification" normalement c'est le compte administrateur de ton pool.

    Revenons maintenant sur l'hébergement de ta page : je te conseille de créer une application web dont les fichiers seront sauvegardés dans layouts puis tu donne à ton site (web application) le même pool que SharePoint.

    Tu peux mettre l'exception ou l'erreur exacte affichée par SharePoint ?

  13. #13
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Citation Envoyé par Goupo Voir le message
    Voici ce qui s'affiche dans ma fenêtre d'exécution VS2010, lorsque que j'exécute à partir de VS2010 :
    L'attachement automatique au processus '[2440] w3wp.exe' sur l'ordinateur 'MONSERVEUR' a réussi.
    L'attachement automatique au processus '[6712] w3wp.exe' sur l'ordinateur 'MONSERVEUR' a réussi.
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans ArticleDeTable.dll
    Une exception de type 'System.Threading.ThreadAbortException' s'est produite dans ArticleDeTable.dll mais n'a pas été gérée dans le code utilisateur
    Une exception de première chance de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll
    Une exception de type 'System.Threading.ThreadAbortException' s'est produite dans Microsoft.SharePoint.dll mais n'a pas été gérée dans le code utilisateur
    Dans le navigateur :
    Accès refusé
    Vous n'avez pas les habilitations vous permettant d'éccéder à cette page. Veuillez contacter l'administrateur du site (moi) pour y remédier.

  14. #14
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut
    As-tu résolu le problème ?

  15. #15
    Membre éclairé Avatar de Goupo
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2006
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2006
    Messages : 505
    Par défaut
    Non, et je ne comprends pas bien les solutions que tu me proposes...

    Citation Envoyé par mimosa803 Voir le message
    Sur IIS 6 ou 7, tu va vers les propriétés avancées de ton site SharePoint et tu cherches le nom du pool.
    Après tu va vers ton pool et tu regardes la propriété "Identification" normalement c'est le compte administrateur de ton pool.
    Dans mon pool d'application, je vois une propriété Identity qui a la valeur "Network Service". C'est ce qu'il faut? Il faut que je mette mon user? Le groupe d'users Farm Admin?

    Citation Envoyé par mimosa803 Voir le message
    dont les fichiers seront sauvegardés dans layouts
    Ce n'est pas déjà le cas?!

    Citation Envoyé par mimosa803 Voir le message
    puis tu donne à ton site (web application) le même pool que SharePoint.
    Le pool d'application de Sharepoint, c'est lequel? J'ai Shrepoint Central Administration, DefaultAppPool, Sharepoint Web Services Root...
    Pourquoi mettre mon application dans le même pool que Sharepoint?

  16. #16
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2007
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Février 2007
    Messages : 236
    Par défaut
    Bonjour,

    Si ton application ne possède pas le compte administrateur SharePoint pour son Pool, tu n'arriveras jamais à accéder à ton site SharePoint via ton application.

Discussions similaires

  1. Address Access Denied Exception
    Par nassim12 dans le forum Windows Communication Foundation
    Réponses: 3
    Dernier message: 09/09/2008, 12h53
  2. [Applet][Security] Access Denied
    Par medba dans le forum Applets
    Réponses: 3
    Dernier message: 23/09/2005, 14h40
  3. access denied
    Par HULK dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/08/2005, 08h26
  4. Access denied..... Help !
    Par chakan dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/12/2003, 22h30

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