Microsoft 365

Power Automate フローで SharePoint の権限の継承を中止する2つの方法とその微妙な仕様の違い

※このエントリは Office 365 Advent Calendar 2021 に参加しています。

SharePoint Online には「権限の継承」という概念があります。これは上位のオブジェクトに設定された権限は、そのまま下位に引き継がれる、というものです。何も変更しなければサイトの権限はそのままアプリに適用され、さらにアプリ内のファイルやフォルダやアイテムも同じアクセス権が設定されます。

そのため SharePoint Online では、上位と異なるアクセス権を設定する際には、まず一旦「権限の継承を中止する」という操作が必要です。

20211205 image01

また、 SharePoint Online は様々な操作を REST API から行うことができるため、この「権限の継承を中止する」動作もWebサービス経由で行うことができます。

[方法] ロール割り当ての継承を解除する オブジェクトの BreakRoleInheritance メソッドを使用すると、Web サイト、リスト、またはリスト アイテムのセキュリティ継承を解除できます。

https://docs.microsoft.com/ja-jp/previous-versions/office/developer/sharepoint-2010/ee535228(v=office.14)

フローでアイテム(など)の権限継承を中止する

さて。この「権限の継承を中止する」動作を Power Automate のフロー上で行うには、二つの方法があります。一つは標準アクション「アイテムまたはファイルの共有を停止します」を利用する方法、もう一つは「SharePoint に HTTP 要求を送信します」アクションで上記の REST API を利用する方法です。

標準アクションの場合はこんな感じです。サイト、アプリ、そして権限継承を止めたいアイテムのID値を指定します。

20211205 image02

一方、REAT API を使うならこんな感じですね。一見、難しくも思えますが、指定するパラメーターは標準アクションとそれほど変わらないため「お作法」として覚えてしまえば大丈夫です。

20211205 image04

実行結果の微妙~な違い

ただ、実はこの二つの方法、「権限の継承を中止する」という動作は同一なのですが、実行した結果に少しだけ差があります。継承を中止した後「残るアクセス権」が異なるんです。

標準アクションの動作
1)権限の継承が中止される
2)既存アクセス権のうち「フルコントロール」のユーザー/グループが残り、それ以外が削除される

REST API 経由の動作:
1)権限の継承が中止される
2)要求の送信者(接続アカウント)が「フルコントロール」権限で追加される
3)それ以外のユーザー/グループがすべて削除される
※厳密には BreakRoleInheritance に設定するパラメータ(上図では省略)によりこの挙動は異なります。

どちらも単純にすべての権限を削除したりしないのは「ついアクセス権を誤って一括削除してしまい、サイトコレクション管理者でなければ見ることすら出来なくなった!」という事故が(オンプレミス SharePoint で)多発していたため、それを避ける意味があるのでしょう。

実際にフローを設計する際は、この微妙な違いを踏まえて二つの方法を使い分けることになります。まあ、通常は標準アクションを利用すれば問題ない、とは思うのですけどね。

それでは、よいお仕事を。