基于用户 id 的灵活命名分区的领域同步权限

Realm sync permissions for flexibly-named partitions based on user id

我是 Realm Sync(和 Realm)的新手。我正在尝试将 REST / SQL 服务器系统转换为 Realm Sync(以避免必须编写我自己的本地设备缓存代码)。

我得到了一个简单的配置,只有一个 API-key 用户和空分区,读写权限刚设置为 true

但对于我更复杂的应用程序,我想要更小的子分区以减少需要在本地设备上缓存的数据量,并且我希望子分区能够由客户端动态创建.理想情况下,我希望允许 API-key 用户连接到名称以其用户 ID(或其他一些已知字符串,例如配置文件名称)开头的任何分区。但是我找不到将“开始于”条件纳入权限的方法。

我最好的尝试是尝试将读取和写入同步权限设置为:

{
  "%%partition": {
    "$regex": "^%%user.id"
  }
}

但我的客户端连接失败,显示 Permission denied (BIND, REFRESH)。 (是的,我尝试使用 "$regex": /^%%user.id/,但 Realm UI 拒绝了该语法。)Realm 同步日志显示“用户无权在分区上同步 (ProtocolErrorCode=206)”。 正如您在日志图像中看到的那样,分区名称等于此测试的用户 ID。

我想做的事情可行吗?如果是这样,我该如何设置同步权限以使其正常工作?

这可以使用函数来完成。如果像我一样,您是 Realm Sync 的新手并且不熟悉 Javascript,请不要担心 - 毕竟这并不难。 (感谢 鼓励我尝试!)

我按照 Define a Function 页面上的说明创建了我的 userCanAccessPartition 函数,如下所示:

exports = function(partition){
  return partition.startsWith(context.user.id);
};

然后我将我的同步权限设置为:

{
  "%%true": {
    "%function": {
      "name": "userCanAccessPartition",
      "arguments": ["%%partition"]
    }
  }
}