gpt4 book ai didi

firebase - Firestore 安全规则使用对另一个文档的引用

转载 作者:行者123 更新时间:2023-12-04 04:36:52 26 4
gpt4 key购买 nike

我正在尝试将安全规则建立在对另一个对象的引用上。

我有一组用户和一组角色。用户对象有一个名为“role”的字段,它是对角色集合中特定文档的引用。

users
id
name
role <-- reference to particular role

roles
id
name
isSuperUser

这里的目标是允许具有特定角色(isSuperUser == true 的角色)的用户编辑任何其他角色或其子集合;

以下是我认为会奏效的规则:
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /roles/{roleId=**} {
function isSuperUser() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role.isSuperuser == true;
}
allow read: if request.auth.uid != null;
allow write: if isSuperUser();
}
}

我已经确认了以下作品,但它并不是那么有用......
get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role != null;

如果有更好的方法来实现角色基础安全,我会全力以赴。

缺乏任何调试工具使这非常令人沮丧。

最佳答案

我知道距离最初的问题已经有一段时间了,但我遇到了类似的问题,我希望这可以帮助您或其他人。

你的情况是:get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role.isSuperuser == true;

但是role是一个引用,这(显然)意味着您需要 get它也是。尝试这个:
get(get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role).data.isSuperuser == true;

关于firebase - Firestore 安全规则使用对另一个文档的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47233942/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com