none
DoesUserHavePermissions - try - catch RRS feed

  • Question

  • bonjour

    j'ai developpé une WP qui verifies que l'utilisateur courant a les droits de lecture sur differents site web d'une collection de site.

    quand je test l'acces au site via :

    result = web.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages | SPBasePermissions.Open);

    il m'affiche le message  : Erreur Acces Refusé

    pas moyen d'eviter ce message via le catch ou via la commande spSite.CatchAccessDeniedException = false;

    vous avez une solutions

    merci

     

    code :
                      foreach (SPWeb webEncours in web.Webs)
                    {
                              try
                            {
                             
                                result = web.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages | SPBasePermissions.Open);
                              }
                              }catch{
                                           ...
                             }

    ...
     

     

     

     


    Marc

    mardi 14 juin 2011 10:05

Réponses

  • Bonjour,

     

    L'appel à la méthode "DoesUserHavePermissions" nécessite d'avoir la permission "EnumeratePermissions".

    Même si c'est un abus de langage, considérez que seuls les administrateurs peuvent exécuter votre code sans provoquer d'exception.

     

    Pour répondre à votre besoin, il vous faut instancier un nouveau SPSite avec le token du compte system :

     

    SPSite tempSite = new SPSite(siteStr);
    bool result = false;
    SPUserToken systoken = tempSite.SystemAccount.UserToken;
     
    using (SPSite site = new SPSite(siteStr, systoken))
    {
      using (SPWeb web = site.OpenWeb())
      {
         foreach (SPWeb webEncours in web.Webs)
         {
            result = webEncours.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages | SPBasePermissions.Open);
         }
      }
    }
    

     


     


    Sébastien PICAMELOT - http://blogs.developpeur.org/gribouillon/

    mardi 14 juin 2011 15:05

Toutes les réponses

  • lorsque je me connecte avec un code user , et si ce user n'a pas les droits d'ouverture sur un site,

    au niveau du debogage la page "ACCES refusé" apparait apres l'instruction : foreach (SPWeb webEncours in web.Webs) !!!

     

    je vois pas


    Marc
    mardi 14 juin 2011 15:05
  • Bonjour,

     

    L'appel à la méthode "DoesUserHavePermissions" nécessite d'avoir la permission "EnumeratePermissions".

    Même si c'est un abus de langage, considérez que seuls les administrateurs peuvent exécuter votre code sans provoquer d'exception.

     

    Pour répondre à votre besoin, il vous faut instancier un nouveau SPSite avec le token du compte system :

     

    SPSite tempSite = new SPSite(siteStr);
    bool result = false;
    SPUserToken systoken = tempSite.SystemAccount.UserToken;
     
    using (SPSite site = new SPSite(siteStr, systoken))
    {
      using (SPWeb web = site.OpenWeb())
      {
         foreach (SPWeb webEncours in web.Webs)
         {
            result = webEncours.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.ViewPages | SPBasePermissions.Open);
         }
      }
    }
    

     


     


    Sébastien PICAMELOT - http://blogs.developpeur.org/gribouillon/

    mardi 14 juin 2011 15:05
  • Bonjour Sébastien

    Merci pour ton aide et tes informations qui vont m'etre utiles, cela marche,

    Mais apres avoir cherché je me suis rendu compte que ma methode fonctionné aussi , j'avais par contre betement oublié de casser l'heritage au

    niveau de mon site web, ce qui erroné mes tests.

    voici le code

    using (SPSite site = new SPSite(UrlDefault))
                {  
                   
                    using (SPWeb web = site.OpenWeb())
                    {
                        SPUser currentUser = web.CurrentUser;
                        foreach (SPWeb webEncours in web.Webs)
                         {
                                 try
                                {
                  
                                        if (webEncours.DoesUserHavePermissions(currentUser.LoginName, SPBasePermissions.Open| SPBasePermissions.ViewPages))
                                        {
                                            //...
                                          
                                        }
                                  }catch{
                                                 //...
                                  }//end try

    ...

     

     


    Marc
    mercredi 15 juin 2011 09:24