"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権限と 権限を、それらのフィールドに定義されている権限に関係なく、フィールドに含まれるすべての埋め込みフィールドに適用します。




