Нарушение наследования назначения роли
Дата последнего изменения: 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.
См. также
Концепции
Практическое руководство. Работа с пользователями и группами
Авторизация, пользователи и группы
Инструкции по использованию клиентской объектной модели