|
Publicité | ||||||||||||||||||||||
|
|
#1 |
![]() Nom : David BARBARIN
Date d'inscription: août 2005
Localisation: LYON
Âge: 31
Messages: 1 510
|
Bonjour tout le monde
Je suis après faire un event Handler avec l'événement ItemAdded. Lors de cet événement je cherche à modifier les droits sur un élément d'une liste. Voici le code Code :
public override void ItemAdded(SPItemEventProperties properties)
{
base.DisableEventFiring();
base.ItemAdded(properties);
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite oSite = new SPSite(properties.SiteId))
{
using (SPWeb oWeb = oSite.OpenWeb(properties.RelativeWebUrl))
{
// Suppression de l'héritage des droits sur l'élément
SPListItem element = oWeb.Lists[properties.ListId].GetItemById(properties.ListItemId);
if (element.HasUniqueRoleAssignments)
{
element.BreakRoleInheritance(false);
}
// Suppression lecture visiteurs portail
SPPrincipal TargetGroupDenied = oWeb.SiteGroups["Visiteurs de portail"];
element.RoleAssignments.Remove(TargetGroupDenied);
// Autorisation collaboration membres de documentation
SPPrincipal TargetGroupAccessMember = oWeb.SiteGroups["Membres de documentation"];
SPRoleAssignment NewRoleCollaboration = new SPRoleAssignment(TargetGroupAccessMember);
NewRoleCollaboration.RoleDefinitionBindings.Add(oWeb.RoleDefinitions["Collaboration"]);
element.RoleAssignments.Add(NewRoleCollaboration);
// Autorisation approbation pour les approbateurs
SPPrincipal TargetGroupAccessApprobateurs = oWeb.SiteGroups["Approbateurs"];
SPRoleAssignment NewRoleApprobation = new SPRoleAssignment(TargetGroupAccessApprobateurs);
NewRoleApprobation.RoleDefinitionBindings.Add(oWeb.RoleDefinitions["Approuver"]);
element.RoleAssignments.Add(NewRoleApprobation);
// Mis à jour des permissions sur l'item
element.Update();
}
}
});
base.EnableEventFiring();
}
Code :
Une exception de type 'System.ArgumentException' ...... La valeur n'est pas comprise dans la plage attendue Quelqu'un a t'il une idée ? Merci pour l'aide Dernière modification par mikedavem ; 12/09/2008 à 12h05. |
|
|
|
|
#2 |
![]() ![]() |
Je viens de faire un projet qui ressemble tres fort à cela.
Je n'ai pas le code en tete mais tu peux le télécharger ici : http://www.codeplex.com/sprestrictaccess Ludovic,
__________________
Envie de contribuer à la rubrique SharePoint ? Contactez moi par MP ! SharePoint : http://sharepoint.developpez.com Mon site : http://lefortludovic.developpez.com Mon blog : http://www.consultpoint.net/blog |
|
|
|
|
#3 |
![]() Nom : David BARBARIN
Date d'inscription: août 2005
Localisation: LYON
Âge: 31
Messages: 1 510
|
merci pour ta réponse LefortLudovic
Entre temps j'ai cherché de mon côté. Dans le projet que je suis en train de faire , les éléments de la liste concernée possèdent des champs obligatoires. Par conséquent, après l'upload du fichier, l'utilisateur a un formulaire à compléter. D'après ce que j'ai pu voir, (et c'est peut être là que tu pourras me confirmer), dans ce cas bien précis, lors de l'événement itemAdded, sharepoint ne connait pas encore l'identifiant du fichier uploadé car il est encore dans la phase de vérification de celui-ci d'où l'erreur que j'obtiens. J'ai passé mon code dans l'événement itempUpdated et cela fonctionne mieux. Maintenant voici le but de ma démarche (pour expliquer un peu le pourquoi du comment) : - Lorsqu'un utilisateur upload un fichier , il est soumis à un formulaire car l'élément de la liste possède des champs obligatoires (indice du document , propriétaire du document , référence du document etc....) - une fois le fichier uploadé dans la liste, il arrive dans un statut brouillon (la liste gère les versions principales et secondaires). - L'utilisateur publie une version principale si aucune modification ne doit être faite sur son document - Un workflow manuel est lancé par celui-ci qui permet en autre l'approbation de son document par un approbateur qu'il aura choisi. (L'utilisateur n'a pas le droit d'approuver lui-même le document) Il y a donc toute une phase où le document n'est pas approuvé. Cette phase peut durer quelques jours selon la disponibilité des gens qui approuvent le document. Pendant cette même phase si un utilisateur qui ne possède qu'un droit en lecture seule sur le document effectue une recherche sur celui-ci, il apparaît dans les éléments de la recherche. Bien sûr le document n'est pas accessible lorsqu'il essaie de l'ouvrir mais pour certaines raisons on m'a demandé qu'il n'apparaisse pas dans la recherche à ce moment là. La recherche Sharepoint se base effectivement sur les droits. La solution que j'ai trouvé est la suivante : - Lors de l'insertion du document : je supprime les droits du groupe qui a les droits en lecture uniquement et je laisse les droits en contribution,approbation ... - Lors de la validation du document dans mon workflow, je restaure les droits en restaurant l'héritage des droits sur la liste Si quelqu'un a une autre idée plus simple je suis preneur bien sûr |
|
|
|
|
![]() |
||
EventHandler - Problème avec ItemAdded
|
||
| Outils de la discussion | |
|
|