[方法] ロール割り当ての継承を解除する
最終更新日: 2011年4月30日
適用対象: SharePoint Foundation 2010
この記事の内容
リストのセキュリティ継承を解除する
ドキュメントのセキュリティ継承を解除し、ユーザーを閲覧者として追加する
ドキュメントのセキュリティ継承を解除し、ユーザーのアクセス許可を変更する
オブジェクトの BreakRoleInheritance メソッドを使用すると、Web サイト、リスト、またはリスト アイテムのセキュリティ継承を解除できます。これにより、親オブジェクトのロールの割り当てが子オブジェクトに適用されなくなります。たとえば、リストのロールの割り当てがリスト アイテムに適用されません。Web サイトとリストの場合、このメソッドは、copyRoleAssignments および clearSubScopes という 2 つのブール値パラメーターを渡します。最初のパラメーターは、親サイト コレクションまたは親 Web サイトから既に継承している現在のロールの割り当てを保持するかどうかを指定します。2 番目のパラメーターは、親 Web サイトまたは親リストからアクセス許可を継承できるように、子オブジェクトの固有のアクセス許可をクリアするかどうかを指定します。copyRoleAssignments パラメーターが false に設定されている場合、コードを実行する現在のユーザーはオブジェクトに対してフル コントロールの権限を持ちます。Web サイト、リスト、またはリスト アイテムの ResetRoleInheritance メソッドは、親オブジェクトから子オブジェクトへのロールの割り当ての継承を復元します。
リストのセキュリティ継承を解除する
次の例は、List クラス (JavaScript: List) の BreakRoleInheritance(Boolean, Boolean) メソッド (JavaScript: breakRoleInheritance(copyRoleAssignments, clearSubscopes)) を使用して、リストのセキュリティ継承を解除する方法を示しています。この例を実行すると、その後で Web サイト レベルで行われるロールの割り当てがリスト内のロールの割り当てに影響することはありません。この例によってお知らせリストの継承は解除されますが、リスト内の個々のアイテムにおける固有のロールの割り当ては解除されず、現在のロールの割り当てが保持されます。
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());
}
ドキュメントのセキュリティ継承を解除し、ユーザーを閲覧者として追加する
継承された ListItem クラス (JavaScript: ListItem) の BreakRoleInheritance(Boolean, Boolean) メソッド (JavaScript: breakRoleInheritance(copyRoleAssignments)) は、親リストのロールの割り当てを保持するかどうかを指定する 1 つのブール値パラメーターのみを渡します。次の例では、リスト内の 1 つのアイテムのセキュリティ継承を解除し、指定されたユーザーをそのアイテムの閲覧者として追加します。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());
}
Microsoft SharePoint Foundation 2010 Silverlight オブジェクト モデルのコンテキスト内でのクライアント オブジェクトの操作に関する詳細と例については、「Silverlight オブジェクト モデルを使用する」を参照してください。