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

请参阅与 Device Sync 兼容的权限

在此页面上

  • 同步兼容角色
  • 同步兼容表达式
  • 同步兼容的扩展
  • 权限更改
  • 统一规则系统

使用Device Sync(灵活模式)时,使用权限系统时有一些特殊注意事项。

有关使用常见权限模型设置灵活同步的指南,请参阅 Device Sync 权限指南

重要

Flexible Sync 忽略自定义排序规则

Flexible Sync 会忽略您可能在 Atlas 中的 MongoDB 集合上配置的任何自定义排序规则。相反,在评估同步订阅或权限时,同步集合始终使用 {locale: "simple"}

如果启用 Device Sync(灵活模式),则分配的角色必须是Sync 兼容的。 如果角色与 Sync 不兼容,但其“应用时间”评估为 true,则不考虑其他角色;访问被拒绝。

如果满足以下任一条件,则角色不兼容同步:

  • document_filters.readdocument_filters.write未定义。

  • 文档筛选器、插入或删除表达式:

    • 引用的字段不是可查询字段

    • 使用%%true%%false%%values%%environment%%user以外的扩展

    • 使用%function操作符

  • 顶级read 、顶级write或字段级权限不是布尔型字面量( truefalse )。

  • _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 会在会话开始时展开扩展,因此该函数不会针对每个文档进行操作。
可以。
$eq$ne$gt$gte$lt$lte

重要

如果自上次会话以来角色发生任何变化,App Services 会导致客户端重置

在会话开始时,App Services 展开 "apply when"、 document_filters.readdocument_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

  • 将同步readwrite移动到document_filters.readdocument_filters.write中。 确保document_filters.readdocument_filters.write均已定义。

  • 将以下内容添加到角色中,根据您的使用案例进行调整。您只能使用truefalse 。 一般来说,您可能需要truedocument_filters将限制每个文档级别的读写访问权限。

    "read": true,
    "write": true,
    "insert": true,
    "delete": true,
    "search": true

后退

筛选器传入查询