"Apply When" 式
Atlas App Services は、各ロールに対して定義した「apply when」式を評価することで、ロールが適用されるかどうかを判断します。
このセクションでは、Device Sync を使用していない一般的なシナリオでの "apply when" 式の例を含みます。 一般的な Device Sync シナリオのガイダンスについては、 Device Sync 権限ガイド を参照してください。
ロールに式を追加するには、ユースケースに最も近いシナリオを見つけ、提供されたテンプレートをコピーしてロールに貼り付けます。 コレクションに一致させたり、テンプレートをニーズに合わせて調整したりするには、テンプレート内のプレースホルダー値( <angle brackets>
で示されている)を変更する必要がある場合があります。
注意
このページに記載されている「apply when」式は、外部サービスに使用することもできます。
ユーザーはドキュメントの所有者
この式は、アクティブなユーザーの一意のid
値が指定されたフィールドの値と一致する場合、 true
と評価されます。 "Owner ID フィールド" とは、スキーマ内のユーザー オブジェクトとの関係を表すフィールドを指します。
{ "<Owner ID Field>": "%%user.id" }
ユーザーの ID を含む配列フィールド
この式は、アクティブなユーザーの一意のid
値が指定された配列フィールド内の 1 つ以上の値と一致する場合、 true
と評価されます。
{ "<Array Field>": "%%user.id" }
ユーザーはメール アドレスを持っています
この式は、アクティブなユーザーが内部ユーザー オブジェクトにリストされているメールアドレスを持っている場合、 true
と評価されます。
{ "%%user.data.email": { "%exists": true } }
ユーザーは特定のメールアドレスを持っています
この式は、アクティブなユーザーのメールアドレスが指定されたメールアドレスと一致する場合、 true
と評価されます。
{ "%%user.data.email": "<Email Address>" }
フィールドにはユーザーのメールアドレスが含まれる
この式は、アクティブなユーザーのメールアドレスが指定されたフィールドの値と一致する場合、 true
と評価されます。
{ "%%root.email": "%%user.data.email" }
配列フィールドにユーザーのメールアドレスが含まれる
この式は、アクティブなユーザーのメールアドレスが指定された配列フィールド内の 1 つ以上のstring値と一致する場合、true
と評価されます。
{ "<Array Field>": "%%user.data.email" }
複雑な条件を満たすフィールド
この式は、関数isAuthorizedUser
がアクティブなユーザーの ID 値を渡された場合にtrue
を返す場合、 true
と評価されます。
注意
%function
演算子を使用して、JSON 式から任意の Atlas Function を呼び出すことができます。
{ "%%true": { "%function": { "name": "isAuthorizedUser", "arguments": ["%%user.id"] } } }
CRUD 権限
Atlas App Services は、ロールの権限構成を使用して、アクティブなユーザーがドキュメントを挿入または削除できるかどうか、およびドキュメント内のどのフィールドを読み書きできるかを決定します。
このセクションには、一般的なシナリオのロールを定義するテンプレートが含まれています。 ロールに一連の権限を適用するには、ユースケースに最も近いシナリオを見つけます。 フィールド権限、ドキュメント権限、および/またはロールの権限テーブルを更新して、提供されたスクリーンショットと一致するように更新するか、提供されたテンプレートをコレクションの詳細モード構成にコピーして貼り付けます。 テンプレート内のプレースホルダー値( <angle brackets>
で示されている)をニーズに合わせて変更していることを確認してください。
ロールはすべてのフィールドを読み取ることができますが、書込みはできません
ロールが任意のフィールドを読み取れるようにするには、ドキュメントレベルのread
フィールドをtrue
に設定し、 write
フィールドをfalse
に設定します。
![]() |
|
ロールはすべてのフィールドの読み取りと書き込みが可能
ロールで任意のフィールドの読み取りと書き込みを許可するには、ドキュメントレベルのwrite
フィールドをtrue
に設定します。 ドキュメントレベルの書き込みには読み取り権限が必要であるため、ロールはすべてのフィールドを読み取ることができます。
![]() |
|
ロールはすべてのフィールドを読み取り、特定のフィールドに書込む
ロールですべてのフィールドの読み取りを許可するには、ドキュメントレベルのread
フィールドをtrue
に設定し、 write
フィールドをfalse
に設定します。 ロールが書込みできるフィールドを指定するには、 fields
ドキュメントに埋め込まれたフィールドの構成ドキュメントでwrite
フィールドをtrue
に設定します。
![]() |
|
ロールはすべてのフィールドの読み取りと書き込みができますが、新しいドキュメントは挿入できません
ロールで任意のフィールドの読み取りと書き込みを許可するには、ドキュメントレベルのwrite
フィールドをtrue
に設定します。 ドキュメントレベルの書き込みには読み取り権限が必要であるため、ロールはすべてのフィールドを読み取ることができます。
ロールが新しいドキュメントを挿入できないようにするには、ドキュメントレベルのinsert
フィールドをfalse
に設定します。
![]() |
|
ロールは特定のフィールドに書込みできない
指定したフィールド以外のすべてのフィールドにロールで書込み可能にするには、ドキュメントレベルのread
フィールドをtrue
に設定します。 対応するフィールドレベルのwrite
フィールドをfalse
に、 read
フィールドをtrue
fields
設定します。 最後に、 additional_fields.write
フィールドをtrue
に設定します。
![]() |
|
高度なロール パターン
このセクションで説明されているユースケースでは、App Services UI のデフォルトのコレクション ルール エディターではサポートされていない高度な機能を使用する必要があります。 このテンプレートを使用するには、詳細モードに変換するか、 App Services CLI を使用してコレクション ルール構成をインポートします。
挿入専用ロール
ロールで新しいドキュメントを挿入できるようにするが、データの読み取りや変更を行わないようにするには、 insert
をtrue
に設定し、ドキュメントレベルのwrite
の値を に設定します。これは次の場合にのみtrue
と評価されるルール式です。操作の前にドキュメントが存在しなかった。
{ "name": "insertOnly", "apply_when": <JSON Expression>, "delete": false, "insert": true, "write": { "%%prevRoot": { "%exists": false } }, "additional_fields": {} }
注意
ユーザーによるデータの読み取りを防ぐには、 write
に JSON 式を指定する必要があります。 ドキュメントを挿入するには、ロールにはドキュメント内のすべてのフィールドに対する書込み権限も必要です。ただし、 write
をtrue
に直接設定すると、ロールに読み取り権限も付与されます。 JSON 式 を使用すると、ロールには最初のドキュメント挿入に対する読み取り権限のみが付与されます。
埋め込みドキュメントのフィールドレベルの権限
ロールで埋め込みドキュメントのすべてではなく一部のフィールドの読み取りまたは書き込みを許可するには、埋め込みフィールドのパスと一致する埋め込みドキュメントをfields
ドキュメントに追加します。
{ "name": "canReadEmbeddedField", "apply_when": {}, "delete": true, "insert": true, "fields": { "someEmbeddedDocument": { "fields": { "someEmbeddedField": { "read": true, "write": true } } } }, "additional_fields": {} }
注意
App Services は、特定のフィールドに定義されたread
write
権限と 権限を、それらのフィールドに定義されている権限に関係なく、フィールドに含まれるすべての埋め込みフィールドに適用します。