Power Apps モデル駆動型アプリでセキュリティロールごとにフォームを自動的に切り替える方法をご紹介します。
目次
基本用語
モデル駆動型アプリとは?
Power Appsのモデル駆動型アプリは、データモデルに基づいてアプリケーションを構築する手法です。これにより、複雑なビジネスロジックやプロセスを簡単に管理できます。データはDataverse に保存され、データの整合性や一貫性が保証されます。
Power Apps モデル駆動型アプリのドキュメント – Power Apps | Microsoft Learn
フォームとは?
フォームは、データを表示および入力するためのユーザーインターフェースです。モデル駆動型アプリでは、エンティティ(データベーステーブル)のレコードを表示、作成、編集するためのフォームが提供されます。
モデル駆動型アプリの用語集 – Power Apps | Microsoft Learn
セキュリティロールとは?
セキュリティロールは、ユーザーがDataverseデータに対してどのような操作を行えるかを制御するための設定です。セキュリティロールは、ユーザーやチームに割り当てることができ、特定のエンティティやフィールドへのアクセス権限を定義します。
セキュリティ ロールおよび特権 – Power Platform | Microsoft Learn
Dataverse とは?
Dataverseは、Microsoft Power Platformの一部であり、データをセキュアに保存、管理、共有するためのスケーラブルなデータサービスです。Dataverseは、データモデルの作成、データの整合性の維持、ビジネスプロセスの自動化をサポートします。
Microsoft Dataverse とは – Power Apps | Microsoft Learn
シナリオ
以下のシナリオはわたしのUdemyで取り扱っている備品貸し出しのシナリオを用いています。受講済みでアプリがある方は以下のようにカスタマイズすることができます。
Udemy 受講者の方はセキュリティロールの作成から進めてください。
備品貸出申請シナリオ
このシナリオでは、備品貸出申請のプロセスを管理するモデル駆動型アプリを作成し、セキュリティロールごとに異なるフォームを表示する方法を説明します。具体的には、以下の2つのセキュリティロールとフォームを作成します。
- 申請ロール:申請者が備品貸出申請を行うためのロール
- 承認ロール:管理者が申請を承認または拒否するためのロール
フォームの作成
まず、Dataverseで「備品貸出申請」エンティティを作成します。このエンティティには以下の列が含まれます。
- 申請者(テキスト)
- 備品名(テキスト)
- 申請日(日付)
- 承認ステータス(選択肢:未承認、承認、拒否)
次に、以下の2つのフォームを作成します。
- 申請フォーム:申請者が使用するフォーム。承認ワークフローのステータスは読み取り専用。
- 承認フォーム:管理者が使用するフォーム。承認ワークフローステータスは編集可能。
フォームの種類 | 割り当てるセキュリティロール | ステータス列の編集権限 |
---|---|---|
申請フォーム | 申請者ロール | なし |
承認フォーム | 承認者ロール | あり |
フォームでは、レコードごとの細かい権限設定を行うことができます。さらにビジネスルールと組み合わせることで条件に応じて動的に変更することもできます。
セキュリティロールの作成
Udemy 受講者の方はこちらから作成します。
Dataverseで以下のセキュリティロールを作成します。
申請者の方は自分の備品貸出申請については作成・編集・削除できるが、組織全体の申請については読み取りだけ可能にします。
承認者は全体に権限があるようにします。
セキュリティロール | 作成 | 読み取り | 編集 | 削除 |
---|---|---|---|---|
申請者ロール | 自分のみ | 組織全体 | 自分のみ | 自分のみ |
承認者ロール | 組織全体 | 組織全体 | 組織全体 | 組織全体 |
申請ロールの作成
備品管理ソリューションに入ります。
セキュリティロールを作成します。
名前をつけて保存します。
貸出で検索してテーブルをフィルターします。
テーブルの通り以下のように設定します。
備品テーブルを作成します。
保存して終了します。
ソリューションにセキュリティロールが表示されました。
承認ロールの作成
同じように承認者ロールを作成します。
備品テーブルについては以下のように設定します。
これで2つのセキュリティロールが作成されました。
セキュリティロールごとのフォーム設定
それぞれのフォームを特定のセキュリティロールに関連付けるために、次の手順を実行します。
貸出管理のテーブルで新しいフォームを作成します。
- 申請フォーム:
新しいフォームを作成します。申請フォームという名称にします。
承認ワークフローのステータスの列は読み取り専用にしておきます。
保存して公開します。
セキュリティロールとマッピングします。フォームの設定を開きます。
特定のセキュリティロールとし、申請者ロールに設定します。
フォームの順序を変更します。申請フォームが他よりも優先されるようにします。
申請者ロールをもつユーザーは優先して利用されるフォームにできました。
- 承認フォーム:
フォームをコピーします。
承認フォームという名前にします。
ステータスの列は編集可能にしておきます。
フォームの設定を開きます。
承認者ロールにします。
順序を情報という標準のフォームよりは優先して表示されるようにして、保存して公開します。
保存して公開します。フォームから戻ります。
もしポップアップが出た場合は下側の選択肢である「他のユーザーによる変更を優先」して保存します。
ここまでで、2種類のフォームが作成されました。
モデル駆動型アプリにセキュリティロールを設定
モデル駆動型アプリで作成したセキュリティロールを利用できるようにします。アプリの共有から行います。
アプリを選択して、アプリで使うセキュリティロールを選択し、共有します。
ここでは申請者ロール、承認者ロールを利用します。
もう一つ、Basic ユーザーも追加します。
申請者権限を渡したいユーザーを検索して、セキュリティロールを設定します。
Basicも渡す理由は、テーブルだけのアクセス権限だと、ベースとして必要になるアプリ時代を開く権限や、ユーザーテーブルなど基本的な権限がないからです。
承認者の権限を渡したいユーザーには承認者ロールちおBasic ユーザーロールを設定します。
ユーザーでアプリにアクセスして確認してみます。
ブラウザをプライベートモードまたはゲストユーザーモードで開き、現在開発しているアカウントと別のアカウントでサインインできるようにします。
モデル駆動型アプリのURLは、再生してみて、取得してください。
申請者ユーザーでの動作チェック
InPrivateプラウザモードでアクセスするとログインを求められます。先ほどアプリに追加したアカウントでログインしましょう。まずは申請者ロールを割り当てたユーザーで試してみます。
他のユーザーが作成した行を読み取りすることができます。
しかし、レコードにアクセスすると読み取り権限であることがわかります。
申請を作成してみます。
新規ボタンをクリックすることができます。また、フォームを開くと、「申請フォーム」であることがわかります。
保存後、ワークフローを確認するとステータスは変更できないことがわかります。
正しく動作していることがわかりました。
承認者ユーザーでの動作チェック
次に承認者ロールのユーザーで試してみます。
サインアウトして、承認者ユーザーでログインします。
フォームを開いてみます。別のユーザーで作成した行についても編集権限があることがわかります。また、フォームは承認フォームが選択されています。
ステータスの列を確認してみます。承認フォームではステータスの列を編集することができます。
最後に
この設定により、ユーザーがログインする際に割り当てられたセキュリティロールに基づいて適切なフォームが自動的に表示されます。申請者は承認ステータスを編集できず、管理者は編集可能なフォームを使用できます。
これにより、備品貸出申請のプロセスが効率的に管理でき、データの整合性とセキュリティが確保されます。
いつも有益な情報提供いただきありがとうございます。まさに今知りたかったアクセス制御について、こちらで知ることができました。
セキュリティーロールの作成ですが、保存しても反映されませんでしたが、セキュリティーロールを「公開」したら反映され、期待通りの挙動となりました。
新規作成時は保存と同時に公開なのかもしれませんが、最初、申請者ロールの作成権限を「なし」のまま作ってしまい、見直して「ユーザー」に変更して保存しただけでは反映されなかったので、その上で「公開」したら、編集が反映されて作成権限が付きました。
毎回公開はいらないのかもしれませんが、セキュリティーロール編集時の注意事項として追記があればいいのではと思い、コメントさせていただきます。
そうなんですよね。セキュリティロールの更新時は、そのカスタマイズは一旦下書き状態となりますので公開が必要です。こちらはPower Platform 全般に言えることです。補足いただきありがとうございます。
すみませんが、質問させてください。
>申請者権限を渡したいユーザーを検索して、セキュリティロールを設定します。
ユーザーごとにセキュリティーロールを設定するのではなく、チームやグループ毎に設定する方法はありますでしょうか。
例えば、100人ユーザーがいるアプリの場合、個別にユーザー検索>ロール設定するしかないのでしょうか。
Microsoft 365管理センターで、チームを追加して、そのチームにメンバーを追加し、アプリの共有でユーザーではなくチームにしてみたのですが、それだけではアプリにアクセスできませんでした。
大人数に対してロール付与する時の良いやり方を教えていただけると助かります。
よろしくお願いいたします。
こちらの記事が参考になるかと思います。
https://www.geekfujiwara.com/tech/powerplatform/2247/