#PowerApps と #SharePoint Online の権限について調べてみた

Power Apps で 手軽にアプリ作成を試そうと思うと SharePoint Online（以降、SPO）のカスタムリストをデータソースに選択しますよね。さて検証でもしようかな、と思ってカスタムリスト（以降、リスト）を作ろうとして、ふと思ったんですよ。

「自分はSPO側の権限設定でデータの表示・非表示をあまり制御しないな」

と。

おそらくこうだろう、という予測はあるものの、SPO のリスト側で権限設定（とくに参照権限をはく奪）した場合、それをデータソースとして指定している Power Apps のアプリはどうなるのだろうか？ → 試したことないなぁ → よし、サクッと試してみるか、というコトです。

# はじめに～中の人の設計思想～
当方が SPO のリストをデータソースに利用する際は、基本的に「アプリ利用が可能な全ユーザーが”そのサイトおよび配下のリスト”を”直接閲覧”する可能性がある」前提で設計します。

例えば「A部署はココが閲覧可能だけど、B部署からは見えない」のような管理や、「このライブラリーは役職者以上じゃないと編集不可」といった”比較的大きなくくり”での権限管理を推奨しております。

その理由は、アイテム単体単位や、ドキュメントライブラリーの場合だとフォルダ単位などで非常に細かい権限制御を実施した場合、リスト自体の動作が急激に遅くなるという過去の経験があるからです。加えて、そのような細かな権限設定・変更などの運用・管理を導入したはよいが、スグに実施できなくなって破綻する、という状況も散見しています。

これが根本にあるためですね。
簡単に言うと「細かな権限管理は良くない」のです。
No More Micro Management！

# 検証用リストとアプリ
念のため、検証で利用したリスト情報を記載しております。と、いっても、カスタムリストを作成し、デフォルトのまま[ID]、[タイトル]、[更新者]、[更新日]の並び順で表示しているだけです。
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/646f8788-610d-1ead-3ac1-b2f355a87b75.png)
そのリストから自動生成したアプリを利用しています。なお、SPO のアクセス権と、アプリの共有もあわせて実施してあります。

# リストのアクセス権まるごと消してみた
手始めに、リストのアクセス権を丸ごと削除して、サイトコレクション管理者以外は拒否されるようにしてみました。
![メディア1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/3d2acb27-3609-1c6c-1b72-5f353d2943d7.gif)
上記動画の左上がサイトコレクション管理者、右下が一般ユーザーです。

データソースであるリストへのアクセス権が丸ごとないため、Power Apps のアプリ側でエラーになります。

なお、SPO の権限設定などは公式サイト等をご確認ください。
https://docs.microsoft.com/ja-jp/sharepoint/customize-sharepoint-site-permissions

# 削除した権限を復元してみた
先ほど削除した権限を元に戻します。
![メディア2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/bdcc3fa1-8377-e336-9e5c-ba821e681b97.gif)
もちろん、Power Apps のアプリも利用可能になります。アクセス権が復活したので、一般ユーザーのアプリからでもデータ閲覧が可能になりますね。

# 一部アイテムの権限のみ削除してみた
次に1つのアイテムから全ての権限を削除してみます。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/b11e23dc-af1f-8094-172e-d2b8f3be40de.png)
上イメージのように”03”アイテムが他のユーザーからアクセスできないように権限を全て消してしまいました。なお、他のアイテムは下イメージの権限設定（デフォルトまま）です。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/88764143-2a1b-e4d4-db1e-3ff3e59b8c36.png)
細かなオペレーションは下動画を確認ください。
![メディア3.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/fcd023d3-b500-4e50-1898-e9ebf7a80de7.gif)

結果としては、権限が削除されたアイテムは Power Apps から閲覧できないため、一般ユーザーから見えなくなっています。

■サイトコレクション管理者↓
![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/42b4a785-2962-bc83-ad90-90f7ce76c770.png)
■一般ユーザー↓
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215892/78f218ef-36c8-5bc3-d83d-c432b36505c3.png)

皆さん、予想通りでしたか？

# 細かな権限管理は忌むべき派
重要なので2回目です。アイテム単位や、フォルダ単位で細かい権限管理を実施した場合、SPO リスト自体の動作が遅くなる傾向があります。管理・運用面からみても設定が煩雑になるため、破綻する可能性が非常に高いと考えます。そのため、細かい権限管理を回避するような設計を当方は推奨しています。

「●●には見せたくないデータを管理したいんだけど！」みたいな話題もあると思いますが、そもそも「誰でも閲覧可能なデータ」と「特定ユーザーのみ閲覧可能なデータ」は別で管理できませんか？そのほうが安全だと思いますが、いかがでしょうか。という流派の者です、ハイ。

# まとめ
『Power Apps のアプリでデータとして操作可能なモノは、
　データソース側でチャンと権限付与されているモノのみ！』
ですね。

「検証するまでもない」と言われればソレまでなのですが、データソースへのアクセス権に関する公式情報や、こういう実験をした記事をパッと見つけられなかったため、実際にやってみた次第です。

データ数が限られている場合や、権限付与パターンが破綻せずにコントロール可能な範囲であれば、アプリ側でFilter関数をゴリゴリ書かなくても良いのでデータソース側に権限付与してしまうのもアリかな、と実験して思いました。

結局、SPO リストも、Power Apps のアプリも業務効率化などを実現するための道具なので、手軽な方法で本来の目的を達成できれば正解なんて無いんですよ。なので、データソース側で権限管理するのも状況によって”アリ”だとも言えます。二極論で考えてはダメですよ、皆さん。最適な選択をご検討くださいませ。

それでは、皆さま。素晴らしい Power Platform Life を！

# 【予告】Power Platform Day Summer '20【CM】
今年もやります、Power Platform 祭り！
昨今の情勢も鑑み、今年はオンラインでの開催になります。
お申し込みは下記からお願いします。

　[Power Platform Day Summer '20](https://power-platform.connpass.com/event/178495/)

　日付：2020/07/04(土)
　時間：12:30 〜 18:00

当方も登壇枠を１つ頂戴しておりまして、Power Apps の MRについてデモを交えながら紹介する予定でおります。他にも、魅力的なコンテンツが満載で、どの時間帯で登壇しても裏番組な気持ちになりますｗ
また、前回公表だった皆さんの質問等をご支援するメディックルームも開設予定です。オンラインなので、どこまでやれるか？実験的なトコもありますが、ミンナで楽しくやれればいいな、と考えている次第です。

万障お繰り合わせの上、ご参加くださいませ！