允许用户在 Realm Sync 中读取多个分区
Allow users to read multiple partitions in Realm Sync
我正在尝试学习和设置 Realm Sync。我已经设置了一个数据库和一个反应本机项目来连接到它。我的数据库应该有 public 数据,每个人都应该能够阅读,以及用户特定的数据。据我所知,您可以使用同步规则管理访问。我当前的规则是:
阅读:
{
"$or": [
{
"%%user.id": "%%partition"
},
{
"%%partition": "PUBLIC"
}
]
}
写入:
{
"%%user.id": "%%partition"
}
不知何故,这些规则并没有像预期的那样发挥作用。当使用用户 id 作为分区值时,我收到了来自用户的数据,而不是 public 的数据。换句话说,当使用 PUBLIC
作为分区值时,我只收到 public 数据,而不是用户数据。这部分很有意义,这让我相信读取权限的同步规则不能正常工作。检查 docs 它应该符合我当前的规则。有什么我想念的吗?
我对我的 React Native 应用程序有相同的要求。它还需要同步 public 数据和私人数据(针对当前登录用户)。
奇怪的是,文档对这件事的帮助不大。
据来自 Ian_Ward 的一位 MongoDB 官方论坛员工的 this post 称,打开 Realm 数据库时不可能有多个分区键。因此,解决方案是打开多个 Realm 数据库(每个分区键一个)。
Ian_Ward: "You would need to open two separate realms by supplying each with a separate partitionKey value. You should be able to open them both at the same time."
例如,在我们的例子中,这意味着:
- 正在打开第一个数据库以获取 public 可用数据
- 为用户特定数据打开第二个数据库
const realmPublic = await Realm.open({
schema: [ContactRealm.schema],
sync: {
user, // It can be the instance of the signed in user, or even Realm.Credentials.anonymous()
partitionValue: 'public',
},
});
const realmUser = await Realm.open({
schema: [ContactRealm.schema],
sync: {
user, // MUST be the instance of the signed in user
partitionValue: `user=${user.id}`,
},
});
我正在尝试学习和设置 Realm Sync。我已经设置了一个数据库和一个反应本机项目来连接到它。我的数据库应该有 public 数据,每个人都应该能够阅读,以及用户特定的数据。据我所知,您可以使用同步规则管理访问。我当前的规则是:
阅读:
{
"$or": [
{
"%%user.id": "%%partition"
},
{
"%%partition": "PUBLIC"
}
]
}
写入:
{
"%%user.id": "%%partition"
}
不知何故,这些规则并没有像预期的那样发挥作用。当使用用户 id 作为分区值时,我收到了来自用户的数据,而不是 public 的数据。换句话说,当使用 PUBLIC
作为分区值时,我只收到 public 数据,而不是用户数据。这部分很有意义,这让我相信读取权限的同步规则不能正常工作。检查 docs 它应该符合我当前的规则。有什么我想念的吗?
我对我的 React Native 应用程序有相同的要求。它还需要同步 public 数据和私人数据(针对当前登录用户)。
奇怪的是,文档对这件事的帮助不大。
据来自 Ian_Ward 的一位 MongoDB 官方论坛员工的 this post 称,打开 Realm 数据库时不可能有多个分区键。因此,解决方案是打开多个 Realm 数据库(每个分区键一个)。
Ian_Ward: "You would need to open two separate realms by supplying each with a separate partitionKey value. You should be able to open them both at the same time."
例如,在我们的例子中,这意味着:
- 正在打开第一个数据库以获取 public 可用数据
- 为用户特定数据打开第二个数据库
const realmPublic = await Realm.open({
schema: [ContactRealm.schema],
sync: {
user, // It can be the instance of the signed in user, or even Realm.Credentials.anonymous()
partitionValue: 'public',
},
});
const realmUser = await Realm.open({
schema: [ContactRealm.schema],
sync: {
user, // MUST be the instance of the signed in user
partitionValue: `user=${user.id}`,
},
});