Поделиться через


Нарушение наследования назначения роли

Дата последнего изменения: 30 апреля 2011 г.

Применимо к: SharePoint Foundation 2010

В этой статье
Нарушение наследования безопасности списка
Нарушение наследования безопасности документа и добавления пользователя как читателя
Нарушение наследования безопасности документа и изменение разрешений пользователя

Доступно на сайте SharePoint Online

Можно нарушить наследование безопасности веб-сайта, списка или элемента списка с помощью метода BreakRoleInheritance объекта таким образом, чтобы назначения ролей в родительском объекте больше не применялись к дочернему объекту. Например, назначения ролей больше не будут применяться к элементу списка. Для веб-сайтов и списков этот метод передает два логических параметра, copyRoleAssignments и clearSubScopes. Первый параметр определяет, нужно ли поддерживать назначения ролей, уже наследованные от родительского семейства сайтов или веб-сайта, а второй параметр определяет, нужно ли очистить уникальные разрешения дочерних объектов, чтобы они наследовали разрешения от родительского веб-сайта или списка. Если значение параметра copyRoleAssignments равно false, текущий пользователь, выполняющий код, получает полный доступ к объекту. Метод ResetRoleInheritance веб-сайта, списка или элемента списка восстанавливает наследование назначения ролей родительского объекта дочернему объекту.

Нарушение наследования безопасности списка

В следующем примере показано, как нарушить наследование безопасности списка с помощью метода BreakRoleInheritance(Boolean, Boolean) (JavaScript: breakRoleInheritance(copyRoleAssignments, clearSubscopes)) класса List (JavaScript: List). После выполнения примера последующие назначения ролей на уровне веб-сайта не будут влиять на назначения ролей в списке. В данном примере нарушается наследование списка объявлений, но сохраняется текущее назначение ролей без нарушения уникальных назначений ролей для отдельных элементов списка.

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

Нарушение наследования безопасности документа и добавления пользователя как читателя

Наследованный метод BreakRoleInheritance(Boolean, Boolean) (JavaScript: breakRoleInheritance(copyRoleAssignments)) класса ListItem (JavaScript: ListItem) передает только один логический параметр, который определяет, нужно ли сохранять назначения ролей родительского списка. В следующем примере нарушается наследование одного элемента списка и указанный пользователь добавляется как читатель элемента. Так как значение параметра copyRoleAssignments равно false, текущий пользователь, выполняющий код, получает полный доступ к элементу.

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

Нарушение наследования безопасности документа и изменение разрешений пользователя

В следующем примере нарушается наследование одного элемента списка, но сохраняется текущее назначение ролей элемента. В примере разрешения Reader назначаются указанному пользователю семейства сайтов. В примере используется метод GetByLoginName(String) (JavaScript: getByLoginName(loginName)) для получения пользователя из коллекции пользователей семейства сайтов.

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

Дополнительные сведения и примеры работы с клиентскими объектами в контексте объектной модели Silverlight Microsoft SharePoint Foundation 2010 см. в статье Использование объектной модели Silverlight.

См. также

Концепции

Практическое руководство. Работа с пользователями и группами

Работа с ролями

Авторизация, пользователи и группы

Обзор извлечения данных

Инструкции по использованию клиентской объектной модели

Общие задачи программирования

Другие ресурсы

Библиотека классов для клиента

Библиотека классов ECMAScript