Astuce du jour : impersonation et SharePoint
Vous avez peut-être déjà utilisé le code suivant pour exécuter du code avec des permissions élevées :
Ceci permet de passer outre la sécurité du compte courant et ainsi pouvoir exécuter du code requérant normalement plus de droits. C'est déjà une bonne chose, et répond à certains problématiques (plus d'infos sur le MSDN). Pensez aussi à bien instancier un nouvel objet SPSite (voire SPWeb) et non en passant par le SPContext car ce dernier aura déjà chargé le nécessaire en utilisant le compte original. Attention : gardez en tête qu'étant donné ce mode d'exécution, vous devez d'autant plus être vigilant sur les données remontées et les actions effectuées : ne créez pas de failles de sécurité et n'exposez pas par inadvertance des informations sensibles.
Plutôt que d'utiliser un delegate anonyme, vous pouvez aussi écrire votre méthode et utiliser CodeToRunElevated comme voici:
Exécuter du code avec des droits élevés, c'est bien, mais on a parfois le besoin de le faire avec un compte particulier (pour des tests par exemple). Bien sûr, un bon vieux "run as" sur l'application est possible, mais ce n'est pas toujours adapté puisque l'on lance du coup toute l'application avec ce compte et non uniquement une partie spécifique. Dans ce cas précis, il faudra se pencher sur le "SPUserToken".
Mais qu'est-ce que ce Token ? Et bien c'est un moyen pour SharePoint de connaître le mode d'authentification (Windows ou Forms) ainsi que les différentes informations sur le compte : SID de l'utilisateur + ses groupes de domaine ou l'identifiant et ses groupes, en somme, l'ensemble de son identité.
Son cadre d'utilisation est plus restreint que le RunWithElevatedPrivileges car il ne pourra être utilisé que pour instancier un SPSite:
Enfin, voici quelques pointeurs pour tout ce qui touche à l'impersonation et à l'élévation de privilèges:
Gat, SPSchizophrène