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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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.

  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
    As-tu résolu le problème ?

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