Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

SPWeb.BreakRoleInheritance(false) dans une requête Http GET

Problème:

Lorsque vous appelez SPWeb.BreakRoleInheritance(false) à partir d'une demande HTTP GET, une exception est toujours levée bien que vous ayez spécifié SPWeb.AllUnsafeUpdates=true

Updates are currently disallowed on GET requests. To allow updates on a GET, set the 'AllowUnsafeUpdates' property on SPWeb.

Cause:

Il s'agit d’une limitation « by design » de SPWeb.BreakRoleInheritance.

BreakRoleInheritance fonctionne en deux étapes.

Tout d'abord, il doit supprimer les permissions et copier les autorisations du site parent .

Ensuite, il vérifie le paramètre CopyRoleAssignments. Si la valeur est à false, il effectue une étape supplémentaire pour nettoyer les autorisations.

Malheureusement, il y a un effet de bord à l'étape 1, il “casse” certains objets internes de SPWeb et provoque à nouveau la création des autorisations. Or, la recréation de ces objets internes pousse SPWeb.AllowUnsafeUpdates à avoir une valeur par défaut, qui est la valeur false. En d'autres termes, SPWeb.AllowUnsafeUpdates est réinitialisé au milieu de l’appel à SPWeb.BreakRoleInheritance, il y a donc une exception!!

La solution:

Il existe deux solutions possibles à ce problème:

  1. Vous faites appel à SPWeb.BreakRoleInheritance dans une requête HTTP POST. Il n’est donc plus nécessaire de faire un SPWeb.AllowUnsafeUpdates=true. C’est d’ailleurs recommandé d’un point de vue sécurité.
  2. Vous voulez absolument faire appel à SPWeb.BreakRoleInheritance dans une requête HTTP GET. Il faut appeler SPWeb.BreakRoleInheritance avec le paramètre true.

 

Cette solution s'applique égualement pour SPList.BreakRoleInheritance.

SPWeb web = SPControl.GetContextWeb(this.Context); web.AllowUnsafeUpdates = true; //Attention, une exception est levée si le paramètre est à "false" docLib.BreakRoleInheritance(true); SPRoleAssignmentCollection roles = docLib.RoleAssignments; for (int i = roles.Count-1; i >= 0; i--) { roles.Remove(i); }
Publié jeudi 22 novembre 2007 09:11 par Nicolas
Classé sous : ,
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :

Commentaires

Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 6 heures et 30 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59