You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MongoDB Realm中配置权限允许编辑指定集合的部分字段

问题核心原因
  • 普通集合级别的权限规则和Atlas Device Sync(原Realm Sync)是两套完全独立的权限体系,你之前配置的集合fields字段权限仅对普通SDK CRUD、Data API请求生效,完全不会作用于Sync同步请求
  • Sync权限存在两层校验逻辑,优先级为:Sync全局读写权限 > Sync专属角色/细粒度权限。你之前将Sync全局write设为false,会话在BIND绑定阶段就会被直接拒绝,对应你遇到的206错误,根本不会走到后续细粒度规则校验环节
  • 你开启Sync全局write后出现全字段可写的问题,大概率是你开启了Sync的开发模式(Development Mode),该模式下会默认绕过所有自定义细粒度权限,允许所有读写操作
正确配置步骤
  1. 关闭Sync的开发模式,确保自定义权限可以生效
  2. 将Sync全局读写权限均设置为true,保证同步会话可以正常建立
  3. 进入Sync配置页的「Roles & Permissions」模块,配置专属的Sync角色规则,替代原来的普通集合规则,示例规则如下:
{
  "roles": [
    {
      "name": "default",
      "apply_when": { "%%true": true },
      "read": true,
      "insert": false,
      "delete": false,
      "write": {
        "$or": [
          // 仅允许修改countViews
          { "$arrayEq": [{ "$objectToArray": "%%diff" }, ["countViews"]] },
          // 仅允许修改listViewers
          { "$arrayEq": [{ "$objectToArray": "%%diff" }, ["listViewers"]] },
          // 允许同时修改countViews和listViewers
          { "$arrayEq": [{ "$objectToArray": "%%diff" }, ["countViews", "listViewers"]] }
        ]
      }
    }
  ]
}

规则中%%diff是Sync权限内置变量,指代本次同步请求变更的所有字段集合,上述规则仅允许变更的字段为指定的两个字段,修改其他字段的请求都会被直接拒绝

校验方式

配置完成后重新发起同步请求,修改countViews/listViewers字段可以正常同步,修改其他字段会触发权限拒绝,符合预期。

内容的提问来源于stack exchange,提问作者Aleksandr Prokopenko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:45:03