Power Appsでユーザーやグループによる権限管理を実現する。
Power Appsのキャンバスアプリで、利用しているユーザーや所属するグループによって動作を変える、権限管理を実現する。
2024年4月27日
ユーザーによってフォームの状態を切り替える。
PowerAppsのキャンバスアプリを作成することになったのですが、アプリを利用するユーザーによって、フォームのアイテムを入力可/不可に切り替えたいという要件がありました。 複数人で共同管理するデータベースの項目それぞれについて、権限のあるユーザーだけが変更できるようにしたい、という意図です。 ユーザーに対して権限付与すると、そのユーザーがいなくなった時にメンテナンスしなければいけないため、ついでにグループによる権限管理も加えたいと考えました。
SharePointリストで権限を管理する。
キャンパスアプリのフォームで編集するデータはSharePointリストに保管します。テストデータとしてGAFA社長リストを次のように作成しました。
名前 | 年齢 | 職業 | 生年月日 |
---|---|---|---|
ティム・クック | 63 | アップル CEO | 1960/11/1 |
マーク・ザッカーバーグ | 39 | メタ CEO | 1984/5/14 |
ジェフ・ベゾス | 60 | アマゾン 会長 | 1964/1/12 |
サティア・ナデラ | 56 | マイクロソフトCEO | 1967/8/19 |
権限管理の前段階として、このリストから自動作成でキャンパスアプリを作成します。
利用ユーザーの権限を判断する。
権限設定についてもSharePointのリストで管理します。権限を付与する対象のユーザーやグループはSharePointの列タイプでユーザー
で複数ユーザーまたはグループを設定できるようにします。
利用ユーザーの所属グループから権限を判断する。
PowerAppsでPowerFxのコードを書き、権限設定を実装します。最初にPowerAppsのデータメニューから必要なコネクタを追加します。先に作ったGAFA社長権限
リストとOffice365ユーザー
、Office365グループ
合計3つのコネクタを追加します。
ユーザーに付与された権限のチェック
アプリを利用しているユーザーのメールアドレスは、Office365ユーザーコネクタのMyProfile()
メソッドで取得できます。
Office365ユーザー.MyProfile().Mail
また、GAFA社長権限
リストから項目の入力許可を与えられたユーザーおよびグループを取得するのは、Filter関数やFirst関数を使います。Filter関数だけだと結果がテーブル型のデータになってしまうため、First関数で1行のみ取り出しています。
First(
Filter(
GAFA社長権限,タイトル = "年齢"
)
).'許可ユーザー/グループ'
これら2つのコードを組み合わせて、GAFA社長権限リストの許可ユーザー/グループ
から各ユーザー/グループのメールアドレスをForAll関数で取り出します。
最後にin
演算子をつかって利用ユーザーのメールアドレスが含まれているか確認すれば、OKです。
Office365ユーザー.MyProfile().Mail in
ForAll(
First(
Filter(
GAFA社長権限,タイトル = "年齢"
)
).'許可ユーザー/グループ',Email
)
ユーザーが所属するグループによる権限のチェック
ユーザー自身の権限チェックと同様に許可ユーザー/グループ
列に含まれている項目と利用ユーザーが所属するグループを比較します。許可グループが1件でも含まれていたら、true in ForAll~
がtrue
となります。
true in ForAll(
First(
Filter(
GAFA社長権限,タイトル = "年齢"
)
).'許可ユーザー/グループ',
ThisRecord.Email in
ForAll(
Office365グループ.ListOwnedGroupsV2().value,
ThisRecord.mail)
)
権限設定をコントロールへ設定
ユーザーおよびグループ単位でチェックした権限にしたがって、フォームの入力項目のDisplayMode
をtrue
の場合はDisplayMode.Edit
へ、false
の場合はDisplayMode.View
に切り替えます。そうすることで権限がない場合は常に表示モードになり、編集ができなくなります。