Using firestore with angularfire2 rc 2.
All is working very nicely in development with no effective security rules.
These are the no security rules - where the client code will create, update and delete collections below the $COLLECTION_NAME/document
without issue.
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;
}
}
}
Where I want to get to is to only allow users to access their own data.
I started out with the following rules:
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;
}
}
}
However, as soon as I add any sort of restrictive rule including even just validating the request is authorised.
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;
}
}
I get code permission errors.
[code=permission-denied]: Missing or insufficient permissions.
FirebaseError: Missing or insufficient permissions.
Each {userId} document contains a collection which in turn contains documents so a full path might be something like
const entryCollection: AngularFirestoreCollection<Entry> = this.angularfirestore.collection('collectionC/' + user.uid + '/records' + '/2017-40' + '/entries');
The requests should be authenticated as the access is only granted in the client following authentication using firebase authentication. Logging indicates the uid is present and indeed when creating the document below collectionA or B or C or D the user.uid document is named using the uid.