- 記事一覧 >
- ブログ記事
Dataverseに独自テーブルを作って自分で登録したレコードしか閲覧編集できないようにする
はじめに
Microsoft Power Platform で共通して使用できるデータベース(のようなもので、ツール、サービスの一つ) Microsoft Dataverse (旧:Common Data Service) に独自テーブルを作成して、レコードを追加した本人のみが参照できるように設定しました。
今回、Power Apps に管理者でアクセスして、テーブル作成、列の追加から権限(セキュリティ ロール)設定手順、その結果どうなるかまでを紹介していきたいと思います。
この記事には、Microsoft Power Platformとは?Dataverseとは?Power Appsとは?の説明はありません。
この記事は、あくまで Dataverse の セキュリティ ロール についてのみの話です。Power Apps ポータル や Power Pages の Webロール のことはありません。
本記事情報の誤りにより何らかの問題が生じても、一切責任を負いません。
自己責任でお願いします。
通常は、今回の事例のように単純ではないと思います。
適切に権限が振り分けられているか、確認し、慎重に設定してください。
2022年10月現在の状況を元に説明しています。
概要
管理者、一般ユーザーA、Aと同等の権限の一般ユーザーB
のみが登場人物とします。
管理者:テーブル「いぬ」の全レコードが閲覧編集可能
一般ユーザーA:自分が追加したレコードのみ閲覧編集可能
一般ユーザーB:テーブルデータは何も見えない
の状況にします。
一般ユーザーA、一般ユーザーB ともに、
・既定の一つの部(ルート部署)、既定の一つのチームに所属するのみ
・保持しているロールは Environment Maker、Basic User 2つのロール
とします。
操作する人は、システム管理者で、何でもできる人とします。
テーブル作成
管理者で Power Apps ホーム(https://make.powerapps.com/
)にて、Dataverse を開いて、テーブル をクリックします。
「いぬ」テーブルを作成します。
表示名: いぬ
複数形の名前: いぬ
高度なオプション をクリックして、
スキーマ名: dog
として、他はデフォルトのままとします。
プライマリ列 の方は、デフォルトで入力されている
表示名: Name
スキーマ名: Name
列の要件: 必要なビジネス
のままとします。
列の要件 のところは、以下の意味です。
必要なビジネス = 必須(何か入力されていないといけない)
推奨されるビジネス = 必須ではなく、空欄にできるが、なるべく入力しないといけない列
任意 = これはそのままの意味で、任意(空欄でもOK)
推奨されるビジネス ですが、モデル駆動型アプリで入力するときに青い+印が表示されます。
必要なビジネス のときは、赤い*印です。
新しい列追加のときに i マークをクリックすると、説明が表示されますが、これが選択肢の言葉と食い違っています。
プライマリ列=RDB でいうプライマリキーの意味ではないため、必須(必要なビジネス)ではなくて、任意にできますが、必ず存在しないといけない列になります。
保存 をクリックして、テーブルを作成します。
列 追加
「誕生日」列を作成します。
表示名: 誕生日
データの種類: 日付と時刻
書式: 日付のみ
必須: 推奨されるビジネス
高度なオプション をクリックして、
スキーマ名: birthday
として、他はデフォルトのままとし、保存 をクリックして、列を作成します。
「誕生日」列が追加されています。
編集 をクリックして、レコードを追加します。
このままの画面でもレコード追加できますが、一応、編集画面に移ります。
「Name」列、「誕生日」列に入力していくと、リアルタイムで更新されます。2レコード追加しました。
← 戻る で戻って、その他の 18 件 をクリック → 所有者 にチェックを入れて、保存 をクリックします。
非表示だった所有者の列が表示されます。所有者は、レコードを追加した人の名前が自動入力されています。
確認1
ここまでで、一般ユーザーA、一般ユーザーB ともにアクセス許可が全く無い状態です。(管理者は、先ほどの通り、閲覧編集可能です。)
ここで、画面のメッセージに書かれていますが、この状態でも、列を調べる で、「Name」列、「誕生日」列が有ることくらいは分かります。
セキュリティロールの追加
「いぬ」テーブル専用のセキュリティ ロールを作成します。
ここで、作成する セキュリティ ロール は、作成したからといって、誰かに許可が与えられるものではありません。
管理者で Power Platform 管理センター(https://admin.powerplatform.microsoft.com/
)にて、環境 をクリックして、先ほど作成した「いぬ」テーブルがある環境をクリックします。
ユーザーとアクセス許可 をクリックし、セキュリティ ロール をクリックします。
ロール名: Doggo
(任意)
を入力し、ユーザー定義エンティティ をクリックします。
「いぬ」テーブルの 作成
読み込み
書き込み
削除
追加
追加先
をクリックして、キー(有効範囲)をユーザー とします。設定したら、保存して閉じる をクリックします。
キーを部署以上に広げると、所有者と同じ部署の人のデータにも許可が与えられて、今回の場合、管理者、一般ユーザーA、一般ユーザーBが同じ部署前提のため、全員のデータが有効になります。
キーの違いについて、閲覧(読みこみ)できるできないに絞って、まとめると以下の状況になります。
ルート部署配下の部署所属の一般ユーザーCさんを登場させます。(この後の手順でロールの割り当てが出てきますが、各人に同じロールが割り当てられているものとします。)
サインインユーザー | レコード所有者 | 状況 |
---|---|---|
管理者 | * | 全て閲覧できる(他のロールが効いている) |
一般ユーザーA | * | 全て閲覧できない |
一般ユーザーC | * | 全て閲覧できない |
サインインユーザー | レコード所有者 | 状況 |
---|---|---|
管理者 | * | 全て閲覧できる(他のロールが効いている) |
一般ユーザーA | 管理者 | 全て閲覧できない |
一般ユーザーA | 一般ユーザーA | 閲覧できる |
一般ユーザーA | 一般ユーザーC | 閲覧できない |
一般ユーザーC | 管理者 | 閲覧できない |
一般ユーザーC | 一般ユーザーA | 閲覧できない |
一般ユーザーC | 一般ユーザーC | 閲覧できる |
サインインユーザー | レコード所有者 | 状況 |
---|---|---|
管理者 | * | 全て閲覧できる(他のロールが効いている) |
一般ユーザーA | 管理者 | 閲覧できる |
一般ユーザーA | 一般ユーザーA | 閲覧できる |
一般ユーザーA | 一般ユーザーC | 閲覧できない |
一般ユーザーC | 管理者 | 閲覧できない |
一般ユーザーC | 一般ユーザーA | 閲覧できない |
一般ユーザーC | 一般ユーザーC | 閲覧できる |
↑
一般ユーザーAは一般ユーザーCの上位部署に所属しますが、閲覧できません。
サインインユーザー | レコード所有者 | 状況 |
---|---|---|
管理者 | * | 全て閲覧できる(他のロールが効いている) |
一般ユーザーA | 管理者 | 閲覧できる |
一般ユーザーA | 一般ユーザーA | 閲覧できる |
一般ユーザーA | 一般ユーザーC | 閲覧できる |
一般ユーザーC | 管理者 | 閲覧できない |
一般ユーザーC | 一般ユーザーA | 閲覧できない |
一般ユーザーC | 一般ユーザーC | 閲覧できる |
サインインユーザー | レコード所有者 | 状況 |
---|---|---|
管理者 | * | 全て閲覧できる(他のロールが効いている) |
一般ユーザーA | 管理者 | 閲覧できる |
一般ユーザーA | 一般ユーザーA | 閲覧できる |
一般ユーザーA | 一般ユーザーC | 閲覧できる |
一般ユーザーC | 管理者 | 閲覧できる |
一般ユーザーC | 一般ユーザーA | 閲覧できる |
一般ユーザーC | 一般ユーザーC | 閲覧できる |
↑
ここで初めて、一般ユーザーCが管理者、一般ユーザーA(Bも)が所有者のレコードが閲覧できます。
作成
追加
追加先
有り無しについて、違いが分かりにくかったので、探ってみました。
以下の挙動になりました。実は、追加
は不要でした。(この後の手順で出てきますが、ロールを割り当てたユーザーで確認しました。)
作成 | 追加 | 追加先 | 状況 |
---|---|---|---|
○ | ○ | ○ | Dataverse:入力するところが無い。+新しい行が無効。 モデル駆動型アプリ:+新規が表示されない。 |
● | ○ | ○ | Dataverse:入力するところが無い。+新しい行が無効。 モデル駆動型アプリ:+新規 → フォームからレコード追加できる。 |
○ | ● | ○ | Dataverse:入力するところが無い。+新しい行が無効。 モデル駆動型アプリ:+新規が表示されない。 |
○ | ○ | ● | Dataverse:入力するところが有る。+新しい行が有効。レコードの保存に失敗する。 モデル駆動型アプリ:+新規が表示されない。 |
● | ● | ○ | Dataverse:入力するところが無い。+新しい行が無効。 モデル駆動型アプリ:+新規 → フォームからレコード追加できる。 |
● | ○ | ● | Dataverse:入力するところが有る。+新しい行が有効。レコードを保存できる。 モデル駆動型アプリ:+新規 → フォームからレコード追加できる。 |
○ | ● | ● | Dataverse:入力するところが有る。+新しい行が有効。レコードの保存に失敗する。 モデル駆動型アプリ:+新規が表示されない。 |
● | ● | ● | Dataverse:入力するところが有る。+新しい行が有効。レコードを保存できる。 モデル駆動型アプリ:+新規 → フォームからレコード追加できる。 |
あくまで今回の場合です。
追加
、追加先
は、本来他のレコードとの紐付けに関係します。
ロールの設定は、"累積的" です。つまり、一般ユーザーAがより広い範囲(or より権限が強い)のロール(アクセス許可)を既に持っていた場合、そちらが優先されます。
セキュリティロールの割り当て
設定に戻って、 ユーザーとアクセス許可 から ユーザー をクリックします。
セキュリティロールを割り当てるユーザーの名前をクリックします。
先ほど追加したロール Doggo を選択して、保存 をクリックします。
セキュリティロール割り当てヨシ!
確認2
セキュリティロール "Doggo" が割り当てられた一般ユーザーAは、レコードを新規追加できて、自分のレコードだけ閲覧編集可能になっています。レコードの所有者は、一般ユーザーAになります。
一般ユーザーB は、セキュリティロールを割り当てていないため、相変わらず、アクセス許可が全く無い状態です。
管理者は、依然として、全データ閲覧編集可能ですので、一般ユーザーAのレコードも閲覧編集可能です。
ちなみに、これは、モデル駆動型アプリ(https://********.crm*.dynamics.com/main.aspx?appid=<アプリID>
)でも同じ状況になります。
Dataverse - テーブル - いぬ - データ エクスペリエンス で、
ビューを変更していないから、一覧表示は、Name(プライマリ列)、作成日 です。
フォームも変更していないから、+新規で入力可能なのは、Name(プライマリ列)のみです。
ヨシ!
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。