Firebase 在规则中从地图获取数据
Firebase Getting Data From Maps In Rules
所以我有一个具有以下结构的 Firestore 数据库,其中角色位于 map 对象中。
/users
userid1
roles = ["user":true]
userid2
roles = ["user":true,"admin":true]
/cars
car1
name = "Car 1"
car2
name = "Car 2"
现在我正在编写 Firebase 规则来确保我的数据安全并且只能由管理员访问。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function getRole(role){
return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
}
match /cars/{carID} {
allow read: if request.auth !=null;
allow create,update,delete: if getRole('admin') ;
}
我正在尝试使用以下代码,但它允许 Update/Create 具有管理员角色的用户。
Firebase 还告诉我一个警告
"Invalid type. Received one of [path]. Expected one of [map]."
So I Wanted To Know Where I am going wrong
您在下一行中遗漏了一个右括号,因此 .data.roles
肯定不包含该文档的数据:
return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
// ^
尝试重构如下所示的行,以便您可以访问文档的数据 属性:
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles[role]
所以我有一个具有以下结构的 Firestore 数据库,其中角色位于 map 对象中。
/users
userid1
roles = ["user":true]
userid2
roles = ["user":true,"admin":true]
/cars
car1
name = "Car 1"
car2
name = "Car 2"
现在我正在编写 Firebase 规则来确保我的数据安全并且只能由管理员访问。
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function getRole(role){
return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
}
match /cars/{carID} {
allow read: if request.auth !=null;
allow create,update,delete: if getRole('admin') ;
}
我正在尝试使用以下代码,但它允许 Update/Create 具有管理员角色的用户。
Firebase 还告诉我一个警告
"Invalid type. Received one of [path]. Expected one of [map]."
So I Wanted To Know Where I am going wrong
您在下一行中遗漏了一个右括号,因此 .data.roles
肯定不包含该文档的数据:
return get(/databases/$(database)/documents/users/$(request.auth.uid).data.roles[role])
// ^
尝试重构如下所示的行,以便您可以访问文档的数据 属性:
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.roles[role]