Share via


Gewusst wie: Unterbrechen der Vererbung von Rollenzuweisungen

Letzte Änderung: Samstag, 30. April 2011

Gilt für: SharePoint Foundation 2010

Inhalt dieses Artikels
Unterbrechen der Sicherheitsvererbung einer Liste
Unterbrechen der Sicherheitsvererbung eines Dokuments und Hinzufügen eines Benutzers als Leser
Unterbrechen der Sicherheitsvererbung eines Dokuments und Ändern der Berechtigungen eines Benutzers

Verfügbar in SharePoint Online

Sie können die Sicherheitsvererbung einer Website, einer Liste oder eines Listenelements durch die BreakRoleInheritance-Methode des Objekts unterbrechen, sodass Rollenzuweisungen für das übergeordnete Objekt nicht mehr für das untergeordnete Objekt gelten, das heißt, sodass beispielsweise Rollenzuweisungen für eine Liste für ein Listenelement nicht mehr gelten. Für Websites und Listen werden von dieser Methode zwei boolesche Parameter übergeben, copyRoleAssignments und clearSubScopes. Mit dem ersten Parameter wird angegeben, ob die aktuellen Rollenzuweisungen, die bereits von der übergeordneten Websitesammlung oder Website geerbt wurden, beibehalten werden sollen. Mit dem zweiten Parameter wird angegeben, ob eindeutige Berechtigungen für untergeordnete Objekte gelöscht werden sollen, sodass diese Objekte anschließend Berechtigungen von der übergeordneten Website oder Liste erben. Wenn der copyRoleAssignments-Parameter auf false festgelegt ist, erhält der aktuelle Benutzer, der den Code ausführt, Vollzugriff auf das Objekt. Mit der ResetRoleInheritance-Methode der Website, der Liste oder des Listenelements wird die Vererbung von Rollenzuweisungen vom übergeordneten Objekt an das untergeordnete Objekt wiederhergestellt.

Unterbrechen der Sicherheitsvererbung einer Liste

Im folgenden Beispiel wird gezeigt, wie die Sicherheit einer Liste mithilfe der BreakRoleInheritance(Boolean, Boolean)-Methode (JavaScript: breakRoleInheritance(copyRoleAssignments, clearSubscopes)) der List-Klasse (JavaScript: List) unterbrochen wird. Nach der Ausführung des Beispiels haben nachfolgende Rollenzuweisungen auf Websiteebene keine Auswirkung auf Rollenzuweisungen innerhalb der Liste. Im Beispiel wird die Vererbung der Announcements-Liste unterbrochen, während die aktuellen Rollenzuweisungen beibehalten werden, ohne dass eindeutige Rollenzuweisungen für einzelne Elemente in der Liste unterbrochen werden.

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

Unterbrechen der Sicherheitsvererbung eines Dokuments und Hinzufügen eines Benutzers als Leser

Von der geerbten BreakRoleInheritance(Boolean, Boolean)-Methode (JavaScript: breakRoleInheritance(copyRoleAssignments)) der ListItem-Klasse (JavaScript: ListItem) wird nur ein boolescher Parameter übergeben. Mit diesem wird angegeben, ob die Rollenzuweisungen der übergeordneten Liste beibehalten werden sollen. Im folgenden Beispiel wird die Sicherheitsvererbung eines einzelnen Elements in einer Liste unterbrochen und ein angegebener Benutzer als Leser für das Element hinzugefügt. Da der copyRoleAssignments-Parameter auf false festgelegt ist, erhält der aktuelle Benutzer, der den Code ausführt, Vollzugriff auf das Element.

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

Unterbrechen der Sicherheitsvererbung eines Dokuments und Ändern der Berechtigungen eines Benutzers

Im folgenden Beispiel wird die Sicherheitsvererbung eines Elements in einer Liste unterbrochen, während die aktuellen Rollenzuweisungen des Elements beibehalten werden. Im Beispiel werden einem angegebenen Benutzer in der Websitesammlung Reader-Berechtigungen zugewiesen. Im Beispiel wird die GetByLoginName(String)-Methode (JavaScript: getByLoginName(loginName)) verwendet, um den Benutzer aus der Sammlung der Benutzer in der Websitesammlung abzurufen.

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

Weitere Informationen und Beispiele zum Arbeiten mit Clientobjekten im Kontext des Microsoft SharePoint Foundation 2010 Silverlight-Objektmodells finden Sie unter Verwenden des Silverlight-Objektmodells.

Siehe auch

Konzepte

Gewusst wie: Verwenden von Benutzern und Gruppen

Gewusst wie: Arbeiten mit Rollen

Autorisierung, Benutzer und Gruppen

Übersicht über den Datenabruf

Richtlinien für das Clientobjektmodell

Allgemeine Programmieraufgaben

Weitere Ressourcen

Clientklassenbibliothek

ECMAScript-Klassenbibliothek