如何配置Realm Sync权限允许用户访问名称以其ID开头的动态分区
问题解决方案
你的需求完全可以实现,之前配置失败的核心原因是Realm的权限表达式不会对$regex字段内的模板变量(如%%user.id)做自动插值,你写的正则实际是在匹配字面量以%%user.id开头的分区,自然无法通过校验。
正确的同步权限配置
直接把读写权限替换为以下JSON即可:
{ "$expr": { "$regexMatch": { "input": "%%partition", "regex": { "$concat": ["^", "%%user.id"] } } } }
规则说明
- 用
$expr显式声明使用MongoDB聚合表达式语法,适配变量解析需求 - 用
$regexMatch操作符拆分input(待匹配的分区值)和regex(正则规则)两个参数,避免变量嵌套在正则字符串中无法解析的问题 - 用
$concat把前缀匹配符^和用户ID变量%%user.id拼接成完整的正则规则,此时%%user.id会正常解析为当前请求用户的实际ID - 如果需要匹配其他自定义前缀,比如
config_${用户ID}格式的分区,只需要修改$concat的内容即可,示例:["^config_", "%%user.id"]
注意事项
- 不需要使用
/^xxx/格式的正则字面量写法,Realm的权限JSON配置仅支持字符串格式的正则规则 - 完全等于用户ID的分区名符合
^用户ID的匹配规则,测试时可以正常通过校验,不会再报206权限错误 - 如果需要同时兼容其他固定分区的权限,可以用
$or操作符把多个匹配规则组合起来
内容的提问来源于stack exchange,提问作者Ian Bailey-Mortimer
相关产品推荐
相关产品推荐

