none
[MOSS2007] Modifier les Permissions par programmation RRS feed

  • 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.
    mardi 17 avril 2007 15:10

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;
            }

        }

    lundi 23 avril 2007 09:54

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 ?

    mercredi 18 avril 2007 07:53
  • 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.

    http://www.sharepointblogs.com/berton

    mercredi 18 avril 2007 16:28
  • Merci pour ton idée ca m'évite d'être obligée de donner des droits sur les permissions aux Editeurs. Mais mon problème n'est toujours pas résolu.

    Quelqu'un aurait les lignes de code pour retirer toutes les permissions d'un groupe précis sur un item ?
    lundi 23 avril 2007 08:19
  • 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;
            }

        }

    lundi 23 avril 2007 09:54