我正在尝试编写一些规则,以允许用户仅访问他们有权访问的文档。
我有两个集合:“旅行”和“用户”集合。
“旅行”集合有几个旅行(文档),名称分别为“ 001”,“ 002”,“ 003”,...
users集合具有名称为“ user1@mail.com”,“ user2@mail.com”,...的用户(文档)。
在每个用户内部都有一个名为“ allowedTravels”的对象(地图),在其中跟踪用户可以看到的旅行。像这样:
travels: {
001: {
name: 'Nice travel'
},
002: {
name: 'Amazing Trip'
}
}
users: {
user1@email.com: {
allowedTravels: {
001: {
hasPayed: true
}
}
},
user2@mail.com: {
allowedTravels: {
001: {
hasPayed: false
},
002: {
hasPayed: true
}
}
}
}
我想要的是仅允许用户访问旅行证件,而在这种情况下,用户1应该可以访问旅行001,而用户2应该可以访问旅行001和002。
我要检查的是,如果用户文档中的allowedTravels对象中有一个名为“旅行文档”的属性。如果是这样:允许,如果不是:拒绝
此刻,我的规则如下:
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read: if isSignedIn();
}
}
function isSignedIn() {
return request.auth.uid != null;
}
}
我尝试过的是这样的:
match /{document} {
return exists(/users/${request.auth.email}/allowedTravels/{document})
}
实现我正在寻找的正确方法是什么? 感谢您能给我的任何帮助。谢谢!