我正在尝试为我的 Firestore 数据库创建一些规则。当我在 firebase 控制台的模拟器中运行这些规则时,一切正常。然而,当我部署规则并在我的网站上试用时,我在控制台中收到一个权限被拒绝的错误。
我试图访问的数据是这样存储的:
1. /teams/{teamId}
2. /teams/{teamId}/boards/{boardId}
其中{teamId}
和{boardId}
是自动生成的 ID:
例如:
/teams/JTUrZcqz9Z20JuyCCcnV
/teams/JTUrZcqz9Z20JuyCCcnV/boards/OfcLPZItCk6Li7OeXwwt
我正在尝试遍历所有这些孩子。
firestore.rules:
match /teams/{teamId} {
allow read: if isMemberOfTeam(teamId);
allow write: if true; // memberOfTeam(teamId);
match /boards/{boardID} {
allow read: if memberOfTeam(teamId) || boardIsPublic(teamId);
allow write: if memberOfTeam(teamId);
match /{document=**} {
allow read: if memberOfTeam(teamId) || boardIsPublic(teamId);
allow write: if memberOfTeam(teamId);
}
}
match /{document=**} {
allow read: if isMemberOfTeam(teamId); // memberOfTeam(teamId);
allow write: if true; // memberOfTeam(teamId);
}
}
function isMemberOfTeam(teamId) {
return get(/databases/$(database)/documents/teams/$(teamId)).members[request.auth.uid].isMember;
}
function boardIsPublic(teamId) {
return get(/databases/$(database)/documents/teams/$(teamId)).data.isPublic;
}
网站中的代码: Firestore 查询:
ref.where('members.' + user.uid + '.isMember', '==', true)
所有代码:
this.teamsCollection = this.auth.user$.filter(user => user != null)
.map(user => this.afs.collection<TeamsInterface>('teams', ref => ref.where('members.' + user.uid + '.isMember', '==', true)))
.shareReplay(1);
this.$teams = this.teamsCollection.switchMap(collection => collection.snapshotChanges().map(actions => {
return actions.map(a => {
const data = a.payload.doc.data() as TeamsInterface;
data.id = a.payload.doc.id;
return data;
});
}));
我在控制台中遇到的错误:
权限缺失或不足。
我不知道为什么,但一切都适用于以下代码:
match /teams/{teamId} {
allow read: if isMemberOfTeam(existingData());
allow update: if isMemberOfTeam(existingData()); // memberOfTeam(teamId);
allow create: if isSignedIn();
match /archived/{boardID} {
allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data)
|| boardIsPublic(existingData());
allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);
}
match /boards/{boardID} {
allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data)
|| boardIsPublic(existingData());
allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);
// match /beta {
// allow write: if memberOfTeam(teamId) || boardIsPublic(teamId);
// }
// All subcollection
match /{document=**} {
allow read: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data)
|| boardIsPublic(get(/databases/$(database)/documents/teams/$(teamId)).data);
allow write: if isMemberOfTeam(get(/databases/$(database)/documents/teams/$(teamId)).data);
}
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句