在React Native的Realm中如何仅展示分区匹配用户ID的文档
解决Realm中用户仅查看自身文档的问题
核心思路
你已经通过_partition字段标记了用户ID,只需在查询时过滤该字段,同时配合Realm实例的分区配置,就能实现数据隔离。
步骤1:修改查询逻辑,过滤当前用户的分区
在useQuery中添加filtered条件,只返回当前用户_partition匹配的交易记录:
// 先获取当前登录用户的ID(从你的认证系统或Realm用户对象中获取) const currentUserId = "当前用户的ID"; const transactions = useQuery(Transaction, transaction => { return transaction .filtered('_partition == $0', currentUserId) .sorted('date') });
步骤2:配置Realm实例的分区值(关键安全保障)
除了查询过滤,更底层的安全是让Realm实例仅同步当前用户分区的数据。打开Realm时指定partitionValue为当前用户ID:
const realmConfig = { schema: [Transaction], partitionValue: currentUserId, // 限定仅同步该用户分区的数据 // 其他同步配置(如sync对象,根据你的Realm Sync设置添加) }; // 在组件中使用useRealm或Realm.open初始化实例 const realm = useRealm(realmConfig);
补充:确保Schema定义正确
确认Transaction schema中包含_partition字段:
const Transaction = { name: 'Transaction', properties: { _partition: 'string', // 对应用户ID的分区键 date: 'date', // 你的其他交易字段 }, primaryKey: '_id', // 可选,根据你的数据结构设置 };
这样设置后,Realm会从同步层就限制仅拉取当前用户的数据,再加上查询过滤的双重验证,就能彻底避免用户查看他人文档的问题。
内容的提问来源于stack exchange,提问作者Programmatic Dev
相关产品推荐
相关产品推荐

