Docs Menu
Docs Home
/ /
Atlas App Services
/

データ アクセス ロールの例

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値が指定された配列フィールド内の 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"]
}
}
}

Atlas App Services は、ロールの権限構成を使用して、アクティブなユーザーがドキュメントを挿入または削除できるかどうか、およびドキュメント内のどのフィールドを読み書きできるかを決定します。

このセクションには、一般的なシナリオのロールを定義するテンプレートが含まれています。 ロールに一連の権限を適用するには、ユースケースに最も近いシナリオを見つけます。 フィールド権限、ドキュメント権限、および/またはロールの権限テーブルを更新して、提供されたスクリーンショットと一致するように更新するか、提供されたテンプレートをコレクションの詳細モード構成にコピーして貼り付けます。 テンプレート内のプレースホルダー値( <angle brackets>で示されている)をニーズに合わせて変更していることを確認してください。

ロールが任意のフィールドを読み取れるようにするには、ドキュメントレベルのreadフィールドをtrueに設定し、 writeフィールドをfalseに設定します。

すべてのドキュメントフィールドの読み取り権限を持つロール
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"write": false
}

ロールで任意のフィールドの読み取りと書き込みを許可するには、ドキュメントレベルのwriteフィールドをtrueに設定します。 ドキュメントレベルの書き込みには読み取り権限が必要であるため、ロールはすべてのフィールドを読み取ることができます。

すべてのドキュメントフィールドの読み取りと書き込みの権限を持つロール
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"write": true,
}

ロールですべてのフィールドの読み取りを許可するには、ドキュメントレベルのreadフィールドをtrueに設定し、 writeフィールドをfalseに設定します。 ロールが書込みできるフィールドを指定するには、 fieldsドキュメントに埋め込まれたフィールドの構成ドキュメントでwriteフィールドをtrueに設定します。

特定のフィールドへの書込み (write) 権限を持つロール
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"write": false,
"fields": {
"<Field Name>": { "write": true },
...
}
}

ロールで任意のフィールドの読み取りと書き込みを許可するには、ドキュメントレベルのwriteフィールドをtrueに設定します。 ドキュメントレベルの書き込みには読み取り権限が必要であるため、ロールはすべてのフィールドを読み取ることができます。

ロールが新しいドキュメントを挿入できないようにするには、ドキュメントレベルのinsertフィールドをfalseに設定します。

新しいドキュメントを挿入する権限のないロール
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": false,
"delete": <boolean>,
"write": true,
}

指定したフィールド以外のすべてのフィールドにロールで書込み可能にするには、ドキュメントレベルのreadフィールドをtrueに設定します。 対応するフィールドレベルのwriteフィールドをfalseに、 readフィールドをtrue fields設定します。 最後に、 additional_fields.writeフィールドをtrueに設定します。

すべてではなく一部のフィールドへの書込み (write) 権限を持つロール
{
"name": "<Role Name>",
"apply_when": {<JSON Expression>},
"document_filters": {<JSON Expression>},
"insert": <boolean>,
"delete": <boolean>,
"read": true,
"fields": {
"<Field Name>": {
"read": true,
"write": false
},
...
},
"additional_fields": { "write": true }
}

このセクションで説明されているユースケースでは、App Services UI のデフォルトのコレクション ルール エディターではサポートされていない高度な機能を使用する必要があります。 このテンプレートを使用するには、詳細モードに変換するか、 App Services CLI を使用してコレクション ルール構成をインポートします。

ロールで新しいドキュメントを挿入できるようにするが、データの読み取りや変更を行わないようにするには、 inserttrueに設定し、ドキュメントレベルのwriteの値を に設定します。これは次の場合にのみtrueと評価されるルール式です。操作の前にドキュメントが存在しなかった。

{
"name": "insertOnly",
"apply_when": <JSON Expression>,
"delete": false,
"insert": true,
"write": {
"%%prevRoot": { "%exists": false }
},
"additional_fields": {}
}

注意

ユーザーによるデータの読み取りを防ぐには、 writeに JSON 式を指定する必要があります。 ドキュメントを挿入するには、ロールにはドキュメント内のすべてのフィールドに対する書込み権限も必要です。ただし、 writetrueに直接設定すると、ロールに読み取り権限も付与されます。 JSON 式 を使用すると、ロールには最初のドキュメント挿入に対する読み取り権限のみが付与されます。

ロールで埋め込みドキュメントのすべてではなく一部のフィールドの読み取りまたは書き込みを許可するには、埋め込みフィールドのパスと一致する埋め込みドキュメントをfieldsドキュメントに追加します。

{
"name": "canReadEmbeddedField",
"apply_when": {},
"delete": true,
"insert": true,
"fields": {
"someEmbeddedDocument": {
"fields": {
"someEmbeddedField": {
"read": true,
"write": true
}
}
}
},
"additional_fields": {}
}

注意

App Services は、特定のフィールドに定義されたread write権限と 権限を、それらのフィールドに定義されている権限に関係なく、フィールドに含まれるすべての埋め込みフィールドに適用します。

戻る

高度なルールの設定