#やりたかったこと
PowerAppsでアプリを作る際に、「管理者モード」と「利用者モード」を用意したかった。
ただしアプリを分けるのではなく、ログインユーザー(アプリの利用者)に応じて1つのアプリで。
今回はこれを実現するために、アプリの管理者をまとめたセキュリティグループを作成して、アプリの利用者がそのグループのメンバーかを判定するFlowを作成しましたので、紹介します。
参考にしたのは:Geetha Sivasaliamさんのブログ
#用意するもの
- AzureAD connectorで「ユーザーのグループを取得」できるアカウント
- 3画面作ったPowerAppsアプリ(テスト用)
AzureAD connectorで利用するアカウントはFlow内で使いまわします。この手順は後ほど
#Flowを作る
まずは変数を2つ作成します。IsMemberとGroupID。
GroupID: PowerAppsから渡します。アプリによって判定するグループを変更するため変数化します
IsMember: 利用者がGroupIDで指定されるグループに所属するかどうかのフラグです
AzureAD connectorでアプリ利用者のメールアドレスをキーにして、所属グループ一覧を取得します。
一覧を取得後、ForEachで取得したグループのIDが、GroupIDに等しいかを判定します。
一致したらIsMemberをTrueに変更。
最後にIsMemberをPowerAppsに返します。
※なぜかBooleanを返しているはずが、あとで見るとStringになっている。。。
#PowerAppsでの確認
PowerAppsではデフォルトのスクリーンのOnVisibleに作成したFlowの実行を設定します。
タイマーコントロールは、Flowの実行結果を監視するために利用しています。
タイマーのOnTimerEndで、Flow実行が終わったら、かつグループのメンバーだったら「Admin Screen」に遷移、メンバーではなかったら「User Screen」に遷移させます。
グループIDさえ変えてしまえば、ほかのアプリでも流用できます。
#最後に
Flowを作成したユーザー以外がこのFlowを使う場合には、Flowを共有する際に、Connectorの接続アカウントで「実行専用のユーザーによって・・・」を使わないように注意してください。
最初の接続時にAzureAD Connectorを実行できるユーザーでのサインインが発生するので。