Docs 菜单
Docs 主页
/ /
Atlas App Services
/

数据访问角色示例

Atlas App Services 通过评估您为每个角色定义的“应用时间”表达式来确定角色是否适用。

本部分包含“apply when”表达式示例,适用于不使用 Device Sync 的常见场景。 有关常见 Device Sync 场景的指导,请参阅Device Sync 权限指南。

要将表达式添加到角色,请找到与您的使用案例最匹配的场景,然后将提供的模板复制并粘贴到角色中。您可能需要修改模板中的占位符值(用 <angle brackets> )以匹配您的collection,或者以其他方式调整模板以满足您的需求。

注意

您还可以将此页面上的“apply when”表达式用于外部服务。

如果活跃用户的唯一id值与指定字段的值匹配,则此表达式的计算结果为true 。“所有者 ID 字段”是指模式中表示与用户对象的关系的任何字段。

{
"<Owner ID Field>": "%%user.id"
}

如果活跃用户的唯一id值与指定数组字段中的一个或多个值匹配,则此表达式的计算结果为true

{
"<Array Field>": "%%user.id"
}

如果活跃用户的内部对象中列出了任何电子邮件,则此表达式的计算结果为true

{
"%%user.data.email": { "%exists": true }
}

如果活跃用户的电子邮件地址与指定的电子邮件地址匹配,则此表达式的计算结果为true

{
"%%user.data.email": "<Email Address>"
}

如果活跃用户的电子邮件地址与指定字段的值匹配,则此表达式的计算结果为true

{
"%%root.email": "%%user.data.email"
}

如果活跃用户的电子邮件地址与指定数组字段中的一个或多个字符串值匹配,则此表达式的计算结果为true

{
"<Array Field>": "%%user.data.email"
}

如果函数isAuthorizedUser在传递活跃用户的 ID 值时返回true ,则该表达式的计算结果为true

注意

您可以使用%function操作符从 JSON 表达式调用任何 Realm 函数。

{
"%%true": {
"%function": {
"name": "isAuthorizedUser",
"arguments": ["%%user.id"]
}
}
}

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 。 要指定该角色可以写入的字段,请在字段的配置文档中将write字段设置为true ,该文档嵌入在fields文档中。

有权写入特定字段的角色
{
"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 。 在fields文档中,将相应的字段级write字段设置为false ,将read字段设置为true 。 最后,将additional_fields.write字段设置为true

有权写入某些字段但不是所有字段的角色
{
"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 用户界面中的默认集合规则编辑器不支持的高级功能。 要使用此模板,请转换为高级模式或使用App Services CLI 导入collection规则配置。

要允许角色插入新文档,但以其他方式阻止其读取或修改任何数据集,请将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 会将为给定字段定义的任何readwrite权限应用于该字段包含的所有嵌入式字段,而无论为这些字段定义的任何权限如何。

后退

配置高级规则