【发布时间】:2021-09-05 07:50:19
【问题描述】:
我是 Realm Sync(和 Realm)的新手。我正在尝试将 REST / SQL Server 系统转换为 Realm Sync(以避免编写我自己的本地设备缓存代码)。
我有一个简单的配置,只有一个 API 密钥用户和空分区,读写权限设置为 true。
但是对于我更复杂的应用程序,我想要更小的子分区来减少需要在本地设备上缓存的数据量,并且我希望子分区能够由客户端动态创建。理想情况下,我希望允许 API 密钥用户连接到名称以用户 ID(或其他一些已知字符串,例如配置文件名称)开头的任何分区。但我找不到将“开始于”条件添加到权限中的方法。
我最好的尝试是尝试将读写同步权限设置为:
{
"%%partition": {
"$regex": "^%%user.id"
}
}
但我的客户端无法连接,说Permission denied (BIND, REFRESH)。 (是的,我尝试使用"$regex": /^%%user.id/,但领域 UI 拒绝了该语法。)领域同步日志显示“用户无权在分区上同步 (ProtocolErrorCode=206)”。
正如您在日志图像中看到的,分区名称与此测试的用户 ID 相同。
我正在尝试做的事情可能吗?如果是这样,我该如何设置同步权限以使其正常工作?
【问题讨论】:
-
或者我应该将同步权限保留为“true”并依赖我自己的应用程序逻辑?那安全吗?是否可以获得所有可用分区的列表? (如果是后者,那么我认为这不是一个安全的解决方案。)
-
如果您还没有阅读此Partition Strategy,您应该阅读它,因为它对于理解动态分区至关重要,这就是您正在做的事情。然后阅读Sync Rules,然后回答你的问题Sync Permissions,因为那里有你问的例子。
-
谢谢。我已经阅读了所有这些页面,但它们并没有那么有用。所有示例都有硬编码的分区名称;我希望能够即时创建新分区。所有,也就是说,除了最后一页上的最后一个例子,它使用了一个函数——但实际上并没有解释在哪里或如何安装这样的函数。除非 - 我可以以某种方式将用户 custom_data 添加到我的领域分区之一吗?然后我可以根据需要添加新的分区名称。但是一旦列表变长,它的可扩展性就不会很好。
-
我不确定我是否理解这个问题;分区通常是“即时”创建的。例如;如果新用户注册,他们将被分配一个 uid,然后将其用作该用户数据的分区键。这完全是即时的。或者例如,一个聊天应用程序,其中每个聊天都有自己的分区键。同样,这是非常动态的(即时)。查看函数规则部分的示例;
"name": "canReadPartition", "arguments": ["%%partition"]表示 函数从集合中查找用户对分区的权限。这意味着%%partition可以是任何值。 -
我想我只是希望可能有更简单的方法。好的,我试试写个函数。