请参阅与 Device Sync 兼容的权限
使用Device Sync(灵活模式)时,使用权限系统时有一些特殊注意事项。
有关使用常见权限模型设置灵活同步的指南,请参阅 Device Sync 权限指南。
重要
Flexible Sync 忽略自定义排序规则
Flexible Sync 会忽略您可能在Atlas中的MongoDB集合上配置的任何自定义排序规则。 相反,在评估同步订阅或权限时,同步集合始终使用 {locale: "simple"}
。
同步兼容角色
如果启用 Device Sync(灵活模式),则分配的角色必须是Sync 兼容的。 如果角色与 Sync 不兼容,但其“应用时间”评估为 true,则不考虑其他角色;访问被拒绝。
如果满足以下任一条件,则角色不兼容同步:
document_filters.read
或document_filters.write
未定义。文档筛选器、插入或删除表达式:
引用的字段不是可查询字段
使用
%%true
、%%false
、%%values
、%%environment
或%%user
以外的扩展使用
%function
操作符
顶级
read
、顶级write
或字段级权限不是布尔型字面量(true
或false
)。为
_id
字段指定字段级权限。
同步兼容表达式
启用 Device Sync 后,表达式可能仅引用您的 Realm 数据模型的可查询字段。如果角色引用任何其他字段,则该角色将与 Sync 不兼容,并且无法与 Device Sync 一起使用。
由于启用同步的应用在同步会话开始时分配角色,此时尚未查询任何特定文档,因此您无法在“apply when”表达式中引用文档或其字段值。
同步兼容的扩展
使用 Device Sync 时,不支持某些扩展。 下表指定了哪些扩展在“apply when”或规则表达式中是 Sync 兼容的:
扩展 | 可以用在“Apply When”中吗? | 能否在规则表达式中使用? |
---|---|---|
是 | 是 | |
是 | 是,但需重点考虑 | |
No | No | |
是 | 是,但需重点考虑 | |
否。 这些扩展引用了文档。 App Services 在会话启动时评估“apply when”表达式,因此没有要评估的文档。 | 否。 这些扩展可能会访问文档的不可查询字段,但这是不可能的。 | |
No | No | |
是 | 是 | |
是 | 不可以。App Services 会在会话开始时展开扩展,因此该函数不会针对每个文档进行操作。 | |
是 | 是 | |
是 | 可以。 | |
是 | 是 |
重要
如果自上次会话以来角色发生任何变化,App Services 会导致客户端重置。
在会话开始时,App Services 展开 "apply when"、 document_filters.read
和document_filters.write
表达式中的所有扩展并存储结果。 这将产生以下影响:
如果该值在会话期间发生改变,App Services 将继续使用会话开始时的值。
在下一个会话中,如果该值与此会话开始时的值不同,App Services 会导致客户端重置。
不能在读取和写入规则中使用
%function
操作符。 函数不会针对每个文档进行操作。不能在用户对象中存储权限信息(例如“该用户可以访问哪些文档 ID?”)。在下一个用户会话之前不会重新评估更改,更新将导致客户端重置。
权限更改
如果自上次同步会话以来用户的权限发生变化,Atlas Triggers会触发客户端重置,并使用应用的新权限重新下载所有数据。
在以下情况下,用户的权限可能会发生变化:
以下情况不会触发客户端重置:
将一个新集合添加到 App Services 模式,并定义新命名空间的权限或使用默认角色。这不会触发客户端重置,因为之前尚未应用权限。
在与新模式相同的草稿中为新collection配置自定义权限。相反,在部署模式后部署具有权限更改的草稿将导致客户端重置,因为在初始部署中应用了默认权限。
统一规则系统
在 2023 年 2 月 23 日之前,Device Sync(灵活模式)规则存在于Sync 配置的permissions
字段中。 这些权限现在与非同步权限存在于相同的配置文件中。
导入为旧权限系统配置的应用时,App Services 会自动将权限迁移到新的统一规则系统。 您不必手动迁移应用程序。 如果您有旧的应用配置,则可以导入并重新导出迁移的配置。
作为参考,迁移中发生了以下更改:
将
permissions.defaultRoles
移动到位于data_sources/<data-source-name>/
的数据源配置目录中的default_rule.json
文件。将所有特定于collection的规则移至位于
data_sources/<data-source-name>/<database-name>/<collection-name>/
的相应collection配置目录中的rules.json
文件。将
defaultRoles
重命名为roles
。将
applyWhen
重命名为apply_when
。将同步
read
和write
移动到document_filters.read
和document_filters.write
中。 确保document_filters.read
和document_filters.write
均已定义。将以下内容添加到角色中,根据您的使用案例进行调整。您只能使用
true
或false
。 一般来说,您可能需要true
。document_filters
将限制每个文档级别的读写访问权限。"read": true, "write": true, "insert": true, "delete": true, "search": true