如何创建有效的安全规则以允许列出subscriptions
集合中的所有文档及其内容,这些文档当前登录的用户恰好拥有?还可以使用同一个人编辑这些文档,只需要很少的额外验证规则吗?
Firebase文档不时有非常糟糕的示例。这是我到目前为止所尝试过的,但它说我没有足够的权限来读或写:
match /subscriptions {
allow list;
match /{id} {
allow read: if resource.data.user == /databases/$(database)/documents/users/$(request.auth.sub);
allow update: if request.resource.data.user == request.auth.sub
&& request.resource.data.user == resource.data.user
&& request.resource.data.keys().hasAll(['code', 'schedules', 'common'])
&& request.resource.data.code is string
&& request.resource.data.schedules is list
&& request.resource.data.common is bool;
}
}
一个订阅只能定义一个用户,因此就此而言,我可以在用户文档中使用子收集。但是因为我必须在一个中处理所有数百个 - 可能是数千个 - 订阅,所以逐个获取每个用户和每个订阅都是非常低效的。所以现在我在数据库的根目录中收集了subscriptions
。