【发布时间】:2020-10-04 15:38:08
【问题描述】:
我想通过 firebase 规则和 firebase 查询来实现以下目标。 (我正在使用 firestore 和 vuejs)
前提条件:用户在任何情况下都必须是auth登录
- 允许用户
read/write他自己创建的所有数据条目 - 允许用户
read所有字段(在我的情况下为"visibility")设置为"public"的数据 - 如果用户拥有条目的
id,则允许用户阅读特定条目,即使条目的"visibility"字段设置为不等于"public"(例如"private")
假设这是我收藏的条目
从 User-A 创建第一个条目,从 User-B 创建第二个条目,从 User-C 创建第三个条目:
所以:
- 应该允许用户 B
read/write第二个条目(其他用户依此类推) - 应该允许用户-A、B、C
read第一个和第三个条目。 - 如果用户 A、C 通过直接 document-id 查询等方式知道 firebase 文档的 ID,则应该允许他们使用
read第二个条目。喜欢db.collection('my_collection').doc('abcxyz').get()
第二个问题是:我什至需要"user_id" 字段才能根据用户创建的文档过滤请求?或者,firebase 是否具有内置功能,可以根据(身份验证)检索自行创建的文档?
[
{
"user_id": "the User-A's firebase id",
"foo": "foo",
"bar": true,
"visibility": "public"
},
{
"user_id": "the User-B's firebase id",
"foo": "foo",
"bar": true,
"visibility": "private"
},
{
"user_id": "the User-C's firebase id",
"foo": "foo",
"bar": true,
"visibility": "public"
}
]
有人可以帮我创建规则和请求吗? (我正在使用这个 npm package)
这是我现在用于检索自创条目的查询
this.db.collection("my_collection").where('user_uid','==',this.$store.state.user.id).get().then((querySnapshot) => {
querySnapshot.forEach((doc) => {
//do something
});
});
这个用于创建
db.collection("my_collection").add({
user_uid: this.$store.state.user.id,
foo: this.foo,
bar: this.bar,
visibilty: this.visibility
})
这是我到现在为止的规则
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.uid != null;
}
}
}
【问题讨论】:
标签: javascript firebase vue.js google-cloud-firestore firebase-security