使用带有 angularfire2 rc 2 的 firestore。
在没有有效的安全规则的情况下,一切都在开发中运行良好。
这些是无安全规则——客户端代码将在$COLLECTION_NAME/document
没有问题的情况下创建、更新和删除集合。
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if true;
}
match /collectionB/{userId=**} {
allow read, write: if true;
}
match /collectionC/{userId=**} {
allow read, write: if true;
}
match /collectionD/{userId=**} {
allow read, write: if true;
}
}
}
我想去的地方是只允许用户访问他们自己的数据。
我从以下规则开始:
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionB/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionC/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionD/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
但是,只要我添加任何类型的限制性规则,包括甚至只是验证请求都是授权的。
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if request.auth;
}
match /collectionB/{userId=**} {
allow read, write: if request.auth;
}
match /collectionC/{userId=**} {
allow read, write: if request.auth;
}
match /collectionD/{userId=**} {
allow read, write: if request.auth;
}
}
我收到代码权限错误。
[code=permission-denied]:权限缺失或不足。
FirebaseError:权限缺失或不足。
每个 {userId} 文档都包含一个集合,该集合又包含文档,因此完整路径可能类似于
const entryCollection: AngularFirestoreCollection<Entry> = this.angularfirestore.collection('collectionC/' + user.uid + '/records' + '/2017-40' + '/entries');
应该对请求进行身份验证,因为只有在使用 firebase 身份验证进行身份验证后才在客户端授予访问权限。日志记录表明 uid 存在,并且确实在 collectionA 或 B 或 C 或 D 下创建文档时 user.uid 文档是使用 uid 命名的。