如何在Firebase云存储安全规则中使用Firestore文档参考?


allow write: if /databases/(default)/documents/users/$(request.auth.uid) in 
firestore.get(/databases/(default)/documents/businesses/$(businessDocId)).data.team;

get().data.team值是一个数组,它包含一个Firestore文档引用类型。

我得到一个权限错误时,使用这个云存储,虽然在Firestore安全规则类似的调用工作。

第一行看起来不对劲

你想要这个做什么?

/databases/(default)/documents/users/$(request.auth.uid)

如果您想从Firestore中的文档中读取一个字段,也可以在那里使用firestore.get(),就像您在第二行中所做的那样:

allow write: 
if firestore.get(/databases/(default)/documents/users/$(request.auth.uid)).data.fieldToCheck
in firestore.get(/databases/(default)/documents/businesses/$(businessDocId)).data.team;

工作方案:

function isBusinessOwner(businessDocId) {
let businessTeamArray = firestore.get(/databases/(default)/documents/businesses/$(businessDocId)).data.team;
let businessOwner = businessTeamArray[0];
return businessOwner in businessTeamArray;
}

不幸的是,使用此解决方案,我必须手动选择数组中的索引,因此限制了数组中有多个业务所有者进行比较的可能性。

最新更新