“Apply When”表达式
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 的数组字段
如果活跃用户的唯一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"] } } }
CRUD 权限
App Services 使用角色的权限配置来确定活动用户是否可以插入或删除文档,以及他们可以读写文档中的哪些字段。
本部分包含为常见场景定义角色的模板。 要将一组权限应用于某个角色,请找到与您的使用案例最匹配的场景。 更新字段权限、文档权限和/或角色的权限表以匹配提供的屏幕截图,或将提供的模板复制并粘贴到集合的高级模式配置中。 确保修改模板中的所有占位符值(用<angle brackets>
表示)以满足您的需求。
该角色可以读取所有字段,但不能写入
要允许角色读取任何字段,请将文档级read
字段设置为true
,并将write
字段设置为false
。
![]() |
|
该角色可以读取和写入所有字段
要允许角色读取或写入任何字段,请将文档级write
字段设置为true
。 文档级写入需要读取权限,因此角色将能够读取所有字段。
![]() |
|
该角色可以读取所有字段并写入特定字段
要允许角色读取所有字段,请将文档级read
字段设置为true
,并将write
字段设置为false
。 要指定该角色可以写入的字段,请在字段的配置文档中将write
字段设置为true
,该文档嵌入在fields
文档中。
![]() |
|
该角色可以读取和写入所有字段,但不能插入新文档
要允许角色读取或写入任何字段,请将文档级write
字段设置为true
。 文档级写入需要读取权限,因此角色将能够读取所有字段。
要防止角色插入新文档,请将文档级insert
字段设置为false
。
![]() |
|
角色无法写入特定字段
要允许角色写入除指定字段之外的任何字段,请将文档级read
字段设置为true
。 在fields
文档中,将相应的字段级write
字段设置为false
,将read
字段设置为true
。 最后,将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 会将为给定字段定义的任何read
和write
权限应用于该字段包含的所有嵌入式字段,而无论为这些字段定义的任何权限如何。