Meilleur auteur de réponses
[MOSS2007] Modifier les Permissions par programmation

Question
-
Bonjour,
Comment puis-je (à l'aide de quels objets) par programmation,
- retirer la permission en lecture au groupe "Lecteurs" lorsqu'une certaine condition est vérifiée,
- donner la premission en lecture au groupe "Lecteurs" dans le cas contraire.
Mon problème est que je ne trouve pas comment accéder aux permissions déja existantes par défaut, et les modifier selon les groupes concernés.
Merci.
Réponses
-
Problème résolu.
Voici le code :
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
try
{
SPWeb web = new SPSite(properties.SiteId).OpenWeb(properties.RelativeWebUrl);
SPListItem item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
// Annuler l'héritage par défaut
if (!item.HasUniqueRoleAssignments) { item.BreakRoleInheritance(true); }
if (item["Statut"].ToString() == "En cours de révision")
{
// Interdire l'accès au Lectorat
SPGroup Groupe = web.Groups["Direction"];
item.RoleAssignments.Remove(Groupe);
Groupe = web.Groups["Chefs de Projet"];
item.RoleAssignments.Remove(Groupe);
Groupe = web.Groups["Personnel Exécution"];
item.RoleAssignments.Remove(Groupe);
item.Update();
}
else
{
// Autoriser l'accès au Lectorat
SPGroup Groupe = web.Groups["Direction"];
SPRoleAssignment userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
Groupe = web.Groups["Chefs de Projet"];
userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
Groupe = web.Groups["Personnel Exécution"];
userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
item.Update();
}
}
catch (Exception ex)
{
properties.Cancel = true;
properties.ErrorMessage = "Erreur dans l'Event ItemUpdated : " + ex.Message;
}
}
Toutes les réponses
-
Voici le code que j'ai fais, mais il ne semble pas fonctionner :Code Snippet
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
try
{
SPWeb web = new SPSite(properties.SiteId).OpenWeb(properties.RelativeWebUrl);
SPListItem item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
String Statut = item["Statut"].ToString();
if (Statut != "En production")
{// Cacher le document
if (!item.HasUniqueRoleAssignments) { item.BreakRoleInheritance(true); }
// Retirer les droits en lecture
SPPrincipal groupe = web.AllUsers["Chefs de Projet"];
item.RoleAssignments.Remove(groupe);
groupe = web.AllUsers["Direction"];
item.RoleAssignments.Remove(groupe);
groupe = web.AllUsers["Personnel Exécution"];
item.RoleAssignments.Remove(groupe);
// Application des Mises à jour
item.Update();
web.Dispose();
}
else
{// Mettre en Lecture
if (!item.HasUniqueRoleAssignments) { item.BreakRoleInheritance(true); }
// Donner les droits en lecture
SPPrincipal groupe = web.AllUsers["Chefs de Projet"];
SPRoleAssignment roleAssignment = new SPRoleAssignment(groupe);
SPRoleDefinition RoleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Reader);
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
item.RoleAssignments.Add(roleAssignment);
groupe = web.AllUsers["Direction"];
roleAssignment = new SPRoleAssignment(groupe);
RoleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Reader);
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
item.RoleAssignments.Add(roleAssignment);
groupe = web.AllUsers["Personnel Exécution"];
roleAssignment = new SPRoleAssignment(groupe);
RoleDefinition = web.RoleDefinitions.GetByType(SPRoleType.Reader);
roleAssignment.RoleDefinitionBindings.Add(RoleDefinition);
item.RoleAssignments.Add(roleAssignment);
// Application des Mises à jour
item.Update();
web.Dispose();
}
}
catch (Exception ex)
{
properties.Cancel = true;
properties.ErrorMessage = "Erreur dans l'Event ItemAdded : " + ex.Message;
}
}
Voyez vous l'erreur ? -
Peut être un probléme de droit, as tu essayée en mettant ton code dans un delegate RunWithElevatedPrivileges.
Perso, je fais la même choses que toi, mais sur l'accés à un site WSS, et je suis obligé d'être dans ce mode.
SPSecurity.RunWithElevatedPrivileges(delegate()
{// ton code
}); // SPSecurity.RunWithElevatedPrivileges
--------------------------
Fred Berton.
-
-
Problème résolu.
Voici le code :
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
try
{
SPWeb web = new SPSite(properties.SiteId).OpenWeb(properties.RelativeWebUrl);
SPListItem item = web.Lists[properties.ListId].GetItemById(properties.ListItemId);
// Annuler l'héritage par défaut
if (!item.HasUniqueRoleAssignments) { item.BreakRoleInheritance(true); }
if (item["Statut"].ToString() == "En cours de révision")
{
// Interdire l'accès au Lectorat
SPGroup Groupe = web.Groups["Direction"];
item.RoleAssignments.Remove(Groupe);
Groupe = web.Groups["Chefs de Projet"];
item.RoleAssignments.Remove(Groupe);
Groupe = web.Groups["Personnel Exécution"];
item.RoleAssignments.Remove(Groupe);
item.Update();
}
else
{
// Autoriser l'accès au Lectorat
SPGroup Groupe = web.Groups["Direction"];
SPRoleAssignment userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
Groupe = web.Groups["Chefs de Projet"];
userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
Groupe = web.Groups["Personnel Exécution"];
userRoleAssignment = new SPRoleAssignment(Groupe);
userRoleAssignment.RoleDefinitionBindings.Add(web.RoleDefinitions.GetByType(SPRoleType.Reader));
item.RoleAssignments.Add(userRoleAssignment);
item.Update();
}
}
catch (Exception ex)
{
properties.Cancel = true;
properties.ErrorMessage = "Erreur dans l'Event ItemUpdated : " + ex.Message;
}
}