Power Appsのアプリのアクセス権

アプリを共有していく際に設定するべき項目について記載します。
キャンバスアプリもモデル駆動型アプリもユーザーに使ってもらえるように「公開」をするのですが、それだけでは、アプリを使うことができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/95cd551e-8ba4-50de-f037-940e67f3c18d.png)

最初に十分なアクセス権を付与する必要がありますが、十分なアクセス権とは何でしょうか。

キャンバスアプリとモデル駆動型アプリで分けて説明していきます。
モデル駆動型アプリ（Dataverse）に関しては、工夫したアクセス権付与方法を[最後のほう](https://qiita.com/skuramoto/private/6937fb5bcfab72633ec9#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E3%83%AD%E3%83%BC%E3%83%AB%E3%81%AE%E4%BB%98%E4%B8%8E%E3%81%8C%E3%82%81%E3%82%93%E3%81%A9%E3%81%8F%E3%81%95%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AE%E6%96%B9%E6%B3%95)に記述してますので、ご参考ください。


# キャンバスアプリ

## アクセス権設定
アプリの一覧画面で該当のアプリの三点リーダー［…］をクリックして、[共有]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/beaebec0-15de-1bee-6669-5700988a9d2f.png)

表示される画面で、個人ユーザー、セキュリティ グループ、または組織の全ユーザーと共有できます。（また、組織外の方でも、Azure Active Directoryテナントのゲストユーザーであれば共有できます。）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/05912ee1-4e54-e17e-6b94-532d46081a4f.png" width=80%>

検索バーでユーザーを検索して一人ずつ権限を付与してもよいですし、検索バーに「すべて」と入れると「組織のすべてのユーザー」が表示されるのでこちらを選択することで全ユーザーに一括で割り当てることができます。
組織全体に共有するのは、、という方はセキュリティグループを設定して、部署内の人だけ、特定の人だけに見せるということも可能です。

さらに、アプリ自体の共有だけでなく、アプリが基盤としているソース (DataverseやSharePointなど) へのアクセス許可も管理者が管理する必要があります。
また、フロー、ゲートウェイ、コネクタなどアプリが利用する他のリソースを共有する必要が生じることもあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/430af03e-87ff-c89d-3d23-7aa2d0e0e076.png)
Dataverseのアクセス許可の考え方は基本的にモデル駆動型アプリの考え方と一緒ですので、後述を参考にしてください。

## 共有されたユーザー側の画面
共同編集者の権限を持たないユーザーは以下のように編集や共有などがグレーアウトして実行できません。基本再生させたり、Teamsに追加するなど使用者としての操作しかできないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/83b7ba03-8cac-c6e7-65c3-1c96d3298aad.png)

# モデル駆動型アプリ
モデル駆動型アプリの共有にはロールベースセキュリティを使用します。
ロールベースセキュリティの基本的な概念として、アプリ内で実行可能な一連のアクションを定義する権限がセキュリティロールに含まれています。
すべてのアプリユーザーに1つ以上の標準ロールやカスタムロールを割り当てる必要があります。
（キャンバスアプリでもDataverseを使う場合はこちらの設定も必要です。）

セキュリティロールに関しては以下を参考にしてください。

https://qiita.com/skuramoto/items/fe305aac24273c7cccbf

https://learn.microsoft.com/ja-jp/power-platform/admin/database-security#create-or-configure-a-custom-security-role
## アクセス権設定方法
①アプリから設定する方法と②Power Platform管理センターで設定する方法があります。どちらかを行えば大丈夫です。
セキュリティロールの細かい定義を確認したり、設定変更したりする場合は、Power Platform管理センターから設定するといいと思います。

### ①アプリからアクセス権を設定する方法
キャンバスアプリと同じように、モデル駆動型アプリも、アプリの一覧画面で該当のアプリの三点リーダー［…］をクリックして、[共有]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/0bb360f1-f0ce-edd8-9983-a93563b08d03.png)

表示される画面で、左の「アプリケーション」の下のアプリ名をクリックします。（今回は「管理者アプリ（プロトタイプ）」）

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d7bcc52e-eb14-6f39-bbc1-99c90b0c872e.png" width=80%>

このアプリで扱いたいセキュリティロールを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/4e011807-01bd-6da8-09fc-f9df14831e3b.png" width=80%>


[共有]ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/76dd614d-2626-fa42-fc9e-45b34136e192.png" width=80%>

次に共有したいユーザーを選択します。
アプリ名を選択し、ユーザー入力欄で共有したいユーザーを検索します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/45c5035b-4dc8-61f8-682b-f38cb99e2c4a.png" width=80%>

ユーザーを選択した状態で右のDataverseのセキュリティロールを割り当てるドロップダウンをクリックします。
ロールが表示されるため、この中のどれかを選びます。（ユーザーには少なくとも１つ以上のロールを割り当てなければいけません。）
つまり、標準のロールであるシステム管理者、システムカスタマイザーを選ぶか、カスタムしたロール（今回は「ナレッジ管理者」）を選びます。

:::note info
デフォルトのロール「システム管理者」、「システムカスタマイザー」はすべてのテーブルに権限を持つため、その権限を付与したくない場合はカスタムロールを先に設定する必要があります。

:::
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/28025949-5027-8157-202c-13adb9af14d1.png" width=80%>

### ②Power Platform管理センターでアクセス権を設定する方法
Power Platform管理センターで、[環境]から該当の環境を開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/b1905a22-8848-c8ad-0a87-928dcb362733.png)

[セキュリティロール]、もしくは[ユーザー]からユーザーやチームにセキュリティロールを設定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/3c822e34-8778-fa8d-dbc4-3995a1040333.png)

今回はセキュリティロールから設定していきましょう。
[セキュリティロール]をクリックしたら、現在あるセキュリティロールの一覧が表示されます。

以下のいずれかの方法でユーザーに付与するセキュリティロールを用意します。
①[新しいロール]で新しくカスタムロールを新しく作る
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9c1360e0-b8f2-f92d-b963-8fe9bd62c53f.png)

②すでにあるセキュリティロールを直接付与する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/6722c9d5-54b0-85f4-8110-f8cc587af2ea.png)

③すでにあるセキュリティロールをコピーしてカスタムする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/932249ae-b627-943c-de2e-0a366836d355.png)





セキュリティロールの詳細画面で、このセキュリティロールを付与されているユーザーが一覧で表示されます。
新しくユーザーを追加したい場合は左上の[ユーザーの追加]をクリックします。
その右にある[編集]を選択すると、このセキュリティロールの細かい設定ができます。ここで、どのテーブルに対してどれだけのことをできるようにするのか設定していくことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/f7e1ee26-9298-e034-b2f9-ba4ddae2fbea.png)



## セキュリティロールの付与がめんどうな場合の方法
### 環境にユーザーを追加したら共有できるようにする方法
セキュリティロールの割り当て方法として、ユーザーに直接割り当てる方法と、部署・チームに割り当てる方法があります。

実は環境にはデフォルトチームというものがあり、そのチームには環境に追加されたユーザー全員が入ります。そのため、このデフォルトチームにセキュリティロールを付与することで「**環境に追加されたユーザー全員**」に付与することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d7e50346-2036-6951-5a8b-0293b8dde8f4.png)

Power Platform管理センターで[環境]メニューを開き、該当の環境を選択します。

以下のような環境の詳細画面が表示されたら、
[詳細]の環境URLの最初の<font color="FireBrick">**xxx**</font>の値がデフォルトチームの名前になりますので、こちらをメモしておいてください。

　　　　**<font color="FireBrick">xxx</font>.crmx.dynamcis.com**

デフォルトチーム名は環境によって違います。
画面右の[セキュリティロール]を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bdccb37d-1b8b-e7b3-978a-7bc18f3c7be8.png)

一覧が表示されたら、割り当てたいセキュリティロールを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9f8529cd-95ca-ad08-ba7a-28ec88802e14.png)

左上の[ユーザーの追加]を選択し、画面右側に出てくるメニューで先程メモしたデフォルトチームを検索して、選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/a0aeb2c1-5277-294c-3ce6-28379a083e88.png)


これで、環境に追加されているユーザーならだれでもこのロールが割り当たるようになりました。

### Teamsのチームに追加したら共有できるようにする方法
環境のユーザー全員にロールを付与したくない場合や、Power Platform管理センターでユーザーを環境に追加するのがめんどくさい場合はTeamsのチームと連携させて割り当てることもできます。

Power Platform管理センターで環境を選択します。
詳細画面で[チーム]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/d9ed8e6e-fe97-cc06-38a8-df3f192adb7a.png)

チームの一覧画面で左上の[チームの追加]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/fe011251-625c-fd03-8e68-5e670ddf8671.png)
以下の画像のように新しいチームを作成します。
重要なのはチームの種類とグループ名です。ここで、Teamsのチームとの連携ができます。
設定したら[次へ]ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/83e45d7f-7140-e909-c103-189c06b4fc74.png)


割り当てたいセキュリティロールを選択し、[保存]ボタンをクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/8220b781-647b-5061-8a1c-ce3e18d66d1b.png" width=70%>

これで、Teamsでメンバーを追加すると、そのメンバーに対してセキュリティロールが割り当てられます。
Teamsのメンバーになったら、そのユーザーはアプリを開くことができます。

:::note info
ユーザーは適切なライセンス（Teams、Power Apps）を持っている必要がありますので、そちらの設定はMicrosoft管理センターで行ってください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/bc018399-7a6a-70f8-ecd1-4984e44d78a2.png)

# ちなみに
環境に入っていないユーザーにはアプリURLは以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/9dcdddd1-68ad-1e43-dd99-68e678115398.png)

Basicユーザーロールだけだと以下のような画面になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883014/5f9913b2-8052-2655-05c9-09888500af7e.png)


# まとめ
今回はアプリの共有、アクセス権の付与に関してまとめました。
複数のユーザーに対するセキュリティロールの付与を簡単にする方法もぜひご活用いただければと思います。
最後のTeamsのチームとの連携は以下のグループチームという考え方です。他にも使えそうな場面で使ってみてください。

https://learn.microsoft.com/ja-jp/power-platform/admin/manage-group-teams