【发布时间】:2021-02-26 19:56:01
【问题描述】:
我正在构建一个用户可以发布帖子的应用。我有一些没有问题的东西,但后来我开始把东西放在子集合中,现在得到了一些权限错误。想知道是否有人可以帮助检查一下,如果您发现我在这里做错了什么,请告诉我。
我试图在这里简单地读取数据。
我注释掉了有效的代码(见下文)。现在,我想将posts 集合放在users 集合下的子集合中,这会导致权限问题。
这是我得到的控制台错误:
client.js?06a0:51 error fetching posts Error [FirebaseError]: Missing or insufficient permissions.
这是我获取数据的代码:
async fetch() {
try {
// const postsArr = []
// const postsCol = await this.$fire.firestore
// .collection('posts')
// .orderBy('createdAt', 'desc')
// .limit(5)
// .get()
// postsCol.forEach((doc) => postsArr.push(doc.data()))
// this.posts = postsArr
const postsArr = []
const postsQuery = await this.$fire.firestore
.collectionGroup('posts')
.where('published', '==', true)
.orderBy('createdAt', 'desc')
.limit(1)
.get()
postsQuery.forEach((doc) => postsArr.push(doc.data()))
this.posts = postsArr
} catch (error) {
console.error('error fetching posts', error)
}
},
最后,这是我的安全规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
// lock down all paths and open up as needed. IS THIS REALLY NEEDED? THOUGHT IT WAS COMPUTER SEC 101?
allow read, write: if false;
}
// Required for collection group queries
match /posts/{postId} {
allow read;
}
match /usernames/{username} {
allow read;
allow create: if isValidUsername(username);
}
match /users/{uid} {
allow read;
allow write: if isUser(uid) && isSignedIn() && emailVerified();
}
match /users/{uid}/posts/{postId} {
allow read;
allow create;
// allow create: if canCreatePost(uid);
// allow update: if canUpdatePost(userId) || canIncrementHearts(userId, postId);
// allow delete: if request.auth.uid == userId;
}
有人发现了什么吗?谢谢!
【问题讨论】:
-
我想我明白了。需要在帖子路径中添加通配符:
match /{path=**}/posts/{postId} { allow read; }
标签: javascript google-cloud-firestore nuxt.js firebase-security