我正在尝试构建可调用的云函数,当用户删除帖子时,它还会尝试删除评论,这是帖子的子集合。所以我看到了这个例子,并像一个文档例子一样实现了
image0Resized = image0.resize((int(image0Width/2), int(image0Height/2)))
,我成功将定制令牌接收到客户端。但是我现在要做什么?获取令牌后,我从客户端调用了“ recursiveDelete”函数,但发生错误PERMISSION_DENIED
答案 0 :(得分:0)
对于这种用例,我不认为您确实需要自定义令牌,我建议您使用Firebase Firestore规则,而不是实现自己的基于角色的身份验证。
要遵循的步骤:
1-创建一个可以称为“用户”的集合,并在其中包含该用户可能具有的角色字段,例如“ ADMIN”。此集合中的每个文档ID都可以是firebase auth生成的用户的auth uid。您可以使用currentUser属性从前端获取此uid,并进行了here
的解释2-使用Firestore规则保护数据库,例如:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
// only admins can remove posts
match /posts/{postID} {
allow read, write: if isAdmin();
}
// only admins can remove comments
match /comments/{commentID} {
allow read, write: if isAdmin();
}
// this function will check if the caller has an admin role and allow or disallow the task upon that
function isAdmin() {
return get(/databases/$(database)/documents/
users/$(request.auth.uid)).data.role == "ADMIN";
}
}
}
3-成功删除后文档后,您可以创建带有onDelete触发器的函数,该函数将被调用,并删除递归的注释子集合,为此,您应该包括以下代码:
const client = require('firebase-tools');
exports.recursiveDelete = functions.firestore
.document('posts/{postID}')
.onDelete((snap, context) => {
.....
await client.firestore
.delete(collectionPath, {
project: process.env.GCLOUD_PROJECT,
recursive: true,
yes: true
});
}