Bonjour,
je dois dans un processus d'approbation qui se fait sans workflow faire une modification de droit lors de l'approbation d'un item.
j'ai voulu faire ça depuis un event receiver.
je rencontre un probleme lors de l'update des role :
L'exception System.UnauthorizedAccessException n'a pas été gérée par le code utilisateur
Message=Attempted to perform an unauthorized operation.
voici mon code (pour le moment je ne test qu'un seul cas ):
quelqu'un aurait-il une idée ?
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 base.ItemUpdated(properties); using (DisabledEventsScope scope = new DisabledEventsScope()) { SPSecurity.RunWithElevatedPrivileges(delegate { using (SPSite Site = new SPSite(properties.WebUrl, SPUserToken.SystemAccount)) { using (SPWeb thisweb = Site.OpenWeb()) { SPRoleDefinition ecriture = thisweb.RoleDefinitions["Contribute (no delete no new)"]; thisweb.ValidateFormDigest(); thisweb.AllowUnsafeUpdates = true; SPListItem Item = properties.ListItem; switch ((string)Item["Workflow State"]) { case "Approved": (from SPRoleAssignment role in Item.RoleAssignments where role.RoleDefinitionBindings.Contains(ecriture) select role).ToList().ForEach(delegate(SPRoleAssignment role) { role.RoleDefinitionBindings.Remove(ecriture); role.Update(); }); Item.SystemUpdate(); break; case "Rejected": break; } thisweb.AllowUnsafeUpdates = false; } } }); } }
j'ai du code qui affecte des droit depuis un timerjob par contre qui fonctionne.
ce code fonctionne si un admin du site fait la manip, mais pas si un contributeur le fait.
Partager