Partager via


Procédure : annuler l’héritage des affectations de rôle

Dernière modification : samedi 30 avril 2011

S’applique à : SharePoint Foundation 2010

Dans cet article
Annulation de l’héritage de la sécurité d’une liste
Annulation de l’héritage de la sécurité d’un document et ajout d’un utilisateur en tant que lecteur
Annulation de l’héritage de la sécurité d’un document et modification des autorisations d’un utilisateur

Disponible dans SharePoint Online

Vous pouvez annuler l’héritage de la sécurité d’un site Web, d’une liste ou d’un élément de liste via la méthode BreakRoleInheritance de l’objet afin que les affectations de rôle sur l’objet parent ne soient plus appliquées à l’objet enfant (pour que les affectation de rôle sur une liste ne soient plus appliquées à un élément de liste, par exemple). Pour les listes et les sites Web, cette méthode transmet deux paramètres booléens, copyRoleAssignments et clearSubScopes. Le premier paramètre spécifie si les affectations de rôle actuelles déjà héritées du site Web ou de la collection de sites parent doivent être conservées. Le second paramètre spécifie si les autorisations uniques des objets enfants doivent être effacées afin qu’ils héritent ensuite des autorisations de la liste ou du site Web parent. Si la valeur false est attribuée au paramètre copyRoleAssignments, l’utilisateur actuel qui exécute le code se voit accorder un contrôle total sur l’objet. La méthode ResetRoleInheritance du site Web, de la liste ou de l’élément de liste restaure l’héritage des affectations de rôle de l’objet parent à l’objet enfant.

Annulation de l’héritage de la sécurité d’une liste

L’exemple ci-après montre comment annuler l’héritage de la sécurité d’une liste à l’aide de la méthode BreakRoleInheritance(Boolean, Boolean) (JavaScript : breakRoleInheritance(copyRoleAssignments, clearSubscopes)) de la classe List (JavaScript : List). Une fois l’exemple exécuté, les affectations de rôle suivantes effectuées au niveau du site Web n’auront pas d’effet sur celles dans la liste. L’exemple annule l’héritage de la liste Announcements (Annonces) mais conserve les affectations de rôle actuelles sans annuler les affectations de rôle uniques sur des éléments individuels de la liste.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class BreakSecurityInheritance
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";
            ClientContext oContext = new ClientContext(siteUrl);
            SP.List oList = oContext.Web.Lists.GetByTitle("Announcements");

            oList.BreakRoleInheritance(true, false);

            oContext.ExecuteQuery();
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class BreakSecurityInheritance

        Shared Sub Main ()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("Announcements")

            oList.BreakRoleInheritance(True, False)

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function breakSecurityInheritance() {

    var clientContext = new SP.ClientContext(siteUrl);
    this.oList = clientContext.get_web().get_lists().getByTitle('Announcements');

    oList.breakRoleInheritance(true, false);

    clientContext.load(oList);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {

        alert(this.oList.get_title() + ' role inheritance broken.');
}

function onQueryFailed(sender, args) {

        alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Annulation de l’héritage de la sécurité d’un document et ajout d’un utilisateur en tant que lecteur

La méthode BreakRoleInheritance(Boolean, Boolean) héritée (JavaScript : breakRoleInheritance(copyRoleAssignments)) de la classe ListItem (JavaScript : ListItem) transmet uniquement un paramètre booléen spécifiant si les affectations de rôle de la liste parent doivent être conservées. L’exemple ci-après annule l’héritage de la sécurité d’un seul élément d’une liste et ajoute un utilisateur spécifié en tant que lecteur de l’élément. Comme la valeur false est attribuée au paramètre copyRoleAssignments, l’utilisateur actuel qui exécute le code se voit accorder un contrôle total sur l’élément.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class BreakSecurityInheritanceAddUser
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";
            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("MyList");

            int itemId = 3;
            ListItem oListItem = oList.Items.GetById(itemId);

            oListItem.BreakRoleInheritance(false);

            User oUser = clientContext.Web.SiteUsers.GetByLoginName(@"DOMAIN\alias");

            RoleDefinitionBindingCollection collRoleDefinitionBinding = new RoleDefinitionBindingCollection(clientContext);

            collRoleDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader));

            oListItem.RoleAssignments.Add(oUser, collRoleDefinitionBinding);

            clientContext.ExecuteQuery();
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class BreakSecurityInheritance

        Shared Sub Main ()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("MyList")

            Dim itemId As Integer = 3
            Dim oListItem As ListItem = oList.Items.GetById(itemId)

            oListItem.BreakRoleInheritance(False)

            Dim oUser As User = clientContext.Web.SiteUsers.GetByLoginName("DOMAIN\alias")

            Dim collRoleDefinitionBinding As New RoleDefinitionBindingCollection(clientContext)

            collRoleDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader))

            oListItem.RoleAssignments.Add(oUser, collRoleDefinitionBinding)

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function breakSecurityInheritanceAddUser() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('MyList');

    var itemId = 4;
    this.oListItem = oList.get_items().getById(itemId);

    oListItem.breakRoleInheritance(false);

    this.oUser = clientContext.get_web().get_siteUsers().getByLoginName('DOMAIN\\alias');

    var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext);

    collRoleDefinitionBinding.add(clientContext.get_web().get_roleDefinitions().getByType(SP.RoleType.reader));

    oListItem.get_roleAssignments().add(oUser, collRoleDefinitionBinding);

    clientContext.load(oUser);
    clientContext.load(oListItem);

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {

    alert('Role inheritance broken for item ' + 
        this.oListItem.get_item('Title') + 
        ' and new role assignment for ' + 
        this.oUser.get_loginName());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Annulation de l’héritage de la sécurité d’un document et modification des autorisations d’un utilisateur

L’exemple ci-après annule l’héritage de la sécurité d’un élément d’une liste mais conserve les affectations de rôle actuelles sur l’élément. Il accorde les autorisations Reader à un utilisateur spécifié au sein de la collection de sites. Il utilise la méthode GetByLoginName(String) (JavaScript : getByLoginName(loginName)) pour récupérer l’utilisateur de la collection des utilisateurs au sein de la collection de sites.

using System;
using Microsoft.SharePoint.Client;
using SP = Microsoft.SharePoint.Client;

namespace Microsoft.SDK.SharePointServices.Samples
{
    class BreakSecurityInheritanceChangeUser
    {
        static void Main()
        {
            string siteUrl = "http://MyServer/sites/MySiteCollection";
            ClientContext clientContext = new ClientContext(siteUrl);
            SP.List oList = clientContext.Web.Lists.GetByTitle("MyList");

            int itemId = 2;
            ListItem oListItem = oList.Items.GetById(itemId);

            oListItem.BreakRoleInheritance(true);

            User oUser = clientContext.Web.SiteUsers.GetByLoginName(@"DOMAIN\alias");
            oListItem.RoleAssignments.GetByPrincipal(oUser).DeleteObject();

            RoleDefinitionBindingCollection collRollDefinitionBinding = new RoleDefinitionBindingCollection(clientContext);

            collRollDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader));

            oListItem.RoleAssignments.Add(oUser, collRollDefinitionBinding);

            clientContext.ExecuteQuery();
        }
    }
}
Imports System
Imports Microsoft.SharePoint.Client
Imports SP = Microsoft.SharePoint.Client

Namespace Microsoft.SDK.SharePointServices.Samples
    Class BreakSecurityInheritance

        Shared Sub Main ()
            Dim siteUrl As String = "http://MyServer/sites/MySiteCollection"
            Dim clientContext As New ClientContext(siteUrl)
            Dim oList As SP.List = clientContext.Web.Lists.GetByTitle("MyList")

            Dim itemId As Integer = 2
            Dim oListItem As ListItem = oList.Items.GetById(itemId)

            oListItem.BreakRoleInheritance(True)

            Dim oUser As User = clientContext.Web.SiteUsers.GetByLoginName("DOMAIN\alias")

            oListItem.RoleAssignments.GetByPrincipal(oUser).DeleteObject()

            Dim collRollDefinitionBinding As New RoleDefinitionBindingCollection(clientContext)

            collRollDefinitionBinding.Add(clientContext.Web.RoleDefinitions.GetByType(RoleType.Reader))

            oListItem.RoleAssignments.Add(oUser, collRollDefinitionBinding)

            clientContext.ExecuteQuery()

        End Sub
    End Class
End Namespace
var siteUrl = '/sites/MySiteCollection';

function breakSecurityInheritanceChangeUser() {

    var clientContext = new SP.ClientContext(siteUrl);
    var oList = clientContext.get_web().get_lists().getByTitle('MyList');

    var itemId = 5;
    this.oListItem = oList.get_items().getById(itemId);

    oListItem.breakRoleInheritance(true);

    this.oUser = clientContext.get_web().get_siteUsers().getByLoginName('DOMAIN\\alias');

    oListItem.get_roleAssignments().getByPrincipal(oUser).deleteObject();

    var collRoleDefinitionBinding = SP.RoleDefinitionBindingCollection.newObject(clientContext);

    collRoleDefinitionBinding.add(clientContext.get_web().get_roleDefinitions().getByType(SP.RoleType.administrator));

    oListItem.get_roleAssignments().add(oUser, collRoleDefinitionBinding);

    clientContext.load(oUser);
    clientContext.load(oListItem);        

    clientContext.executeQueryAsync(Function.createDelegate(this, this.onQuerySucceeded), Function.createDelegate(this, this.onQueryFailed));
}

function onQuerySucceeded(sender, args) {

    alert('Role inheritance broken for item ' + 
        this.oListItem.get_item('Title') + 
        ' and new role assignment for ' + 
        this.oUser.get_loginName());
}

function onQueryFailed(sender, args) {

    alert('Request failed. ' + args.get_message() + '\n' + args.get_stackTrace());
}

Pour obtenir des informations et des exemples relatifs à l’utilisation des objets clients dans le contexte du modèle objet Silverlight Microsoft SharePoint Foundation 2010, reportez-vous à l’article Utilisation du modèle objet Silverlight.

Voir aussi

Concepts

Procédure : utiliser des utilisateurs et des groupes

Procédure : utiliser des rôles

Autorisation, utilisateurs et groupes

Vue d'ensemble de la récupération des données

Directive du modèle objet client

Tâches courantes de programmation

Autres ressources

Bibliothèque de classes Client

Bibliothèque de classes ECMAScript