如何根据 firebase 中的父集合限制对子文档的访问
How to restrict access to subdocument based on parent collection in firebase
我有一个包含 2 个顶级集合(报告、用户)的 firestore 数据库。我的规则是这样设置的:
service cloud.firestore {
match /databases/{database}/documents {
match /reports/{report} {
allow read: if request.auth != null && request.auth.uid == resource.data.userID;
allow create: if request.auth != null && request.resource.data.userID == request.auth.uid;
allow delete, update: if request.auth != null &&
request.auth.uid == resource.data.userID;
}
match /users/{user}{
allow read: if request.auth != null && request.auth.uid == resource.id;
allow create: if request.auth != null;
allow delete: if request.auth != null && request.auth.uid == resource.id;
allow update: if request.auth != null && request.auth.uid == resource.id;
}
}
}
我想在用户集合下创建一个子集合。这将包含该用户的默认设置。在我看来,规则是这样的:
match /users/{user}/defaultSettings/{document} {
allow read, write: if request.auth != null && user.id == request.auth.uid
}
但是,我认为我不能在我的规则中使用 2 个占位符(用户和文档)。 Firestore 抱怨我使用 user.id
换句话说,我想要一个用户集合,任何经过身份验证的人都可以读取和写入,因为在注册后我创建了一个包含该用户信息的用户文档。我还想在每个用户下创建一个子集合,只有一个文档保存该用户的设置,我想将对该文档的访问限制为仅由父(用户)文档表示的用户。
我该怎么做?
只需将您的规则更改为:
match /users/{user}/defaultSettings/{document} {
allow read, write: if request.auth != null && user == request.auth.uid
}
为了让您对 user
集合的规则更简单一些,您可以使用:
match /users/{user}{
allow read: if request.auth != null && request.auth.uid == user;
allow create: if request.auth != null;
allow delete: if request.auth != null && request.auth.uid == user;
allow update: if request.auth != null && request.auth.uid == user;
}
我有一个包含 2 个顶级集合(报告、用户)的 firestore 数据库。我的规则是这样设置的:
service cloud.firestore {
match /databases/{database}/documents {
match /reports/{report} {
allow read: if request.auth != null && request.auth.uid == resource.data.userID;
allow create: if request.auth != null && request.resource.data.userID == request.auth.uid;
allow delete, update: if request.auth != null &&
request.auth.uid == resource.data.userID;
}
match /users/{user}{
allow read: if request.auth != null && request.auth.uid == resource.id;
allow create: if request.auth != null;
allow delete: if request.auth != null && request.auth.uid == resource.id;
allow update: if request.auth != null && request.auth.uid == resource.id;
}
}
}
我想在用户集合下创建一个子集合。这将包含该用户的默认设置。在我看来,规则是这样的:
match /users/{user}/defaultSettings/{document} {
allow read, write: if request.auth != null && user.id == request.auth.uid
}
但是,我认为我不能在我的规则中使用 2 个占位符(用户和文档)。 Firestore 抱怨我使用 user.id
换句话说,我想要一个用户集合,任何经过身份验证的人都可以读取和写入,因为在注册后我创建了一个包含该用户信息的用户文档。我还想在每个用户下创建一个子集合,只有一个文档保存该用户的设置,我想将对该文档的访问限制为仅由父(用户)文档表示的用户。
我该怎么做?
只需将您的规则更改为:
match /users/{user}/defaultSettings/{document} {
allow read, write: if request.auth != null && user == request.auth.uid
}
为了让您对 user
集合的规则更简单一些,您可以使用:
match /users/{user}{
allow read: if request.auth != null && request.auth.uid == user;
allow create: if request.auth != null;
allow delete: if request.auth != null && request.auth.uid == user;
allow update: if request.auth != null && request.auth.uid == user;
}