【发布时间】:2017-02-10 18:01:27
【问题描述】:
假设用户在/private/$userId 中存储了一些私人数据,他们可以与他人共享或不共享这些数据。该决定应存储在/privacySettings/$userId/shareData 中,类似于Bool。如果用户将其值设置为true,其他人应该能够读取私有数据。
我已启用 persistance 并尝试使用服务器规则解决此问题:
"private": {
".read": false,
".write": false,
"$userId": {
".read": "auth != null && root.child('privacySettings/' + $userId + '/shareData').val() === true",
".write": "auth != null && auth.uid == $userId"
}
}
这可以正常工作,但不幸的是,当 private/$userId 与 .Value 一起观察时,shareData 的更改不会引发事件。因此,如果其他用户在隐私发生变化之前已经观察到这条路径,他仍然会看到缓存在持久性数据存储中的数据,这不应该是这种情况。当shareData 为false 时,所有数据都应该对其他人隐藏。
如何做到这一点?
编辑:
刚刚发现一旦数据被读取,无论shareData是否被设置为false,观察者总是会返回缓存的数据。当应用程序重新启动时也会发生这种情况。
编辑 2: 仔细考虑之后,我得出的结论是,如果回调返回“权限被拒绝”错误,则可以轻松解决此问题。
【问题讨论】:
标签: ios swift firebase firebase-realtime-database firebase-security