Ensure User ACL's are more flexible and secure #3588 (#4860)

* Fixes an issue that would let the beforeDelete be called when user has no access to the object

* Ensure we properly lock user

- Improves find method so we can attempt to read for a write poking the right ACL instead of using masterKey
- This ensure we do not run beforeDelete/beforeFind/beforeSave in the wrong scenarios

* nits

* Caps insufficient
This commit is contained in:
Florent Vilmart
2018-06-28 16:31:22 -04:00
committed by GitHub
parent 9e5d26ebd2
commit 3bcb5a0997
9 changed files with 158 additions and 39 deletions

View File

@@ -869,7 +869,8 @@ class DatabaseController {
op,
distinct,
pipeline,
readPreference
readPreference,
isWrite,
}: any = {}): Promise<any> {
const isMaster = acl === undefined;
const aclGroup = acl || [];
@@ -930,7 +931,11 @@ class DatabaseController {
}
}
if (!isMaster) {
query = addReadACL(query, aclGroup);
if (isWrite) {
query = addWriteACL(query, aclGroup);
} else {
query = addReadACL(query, aclGroup);
}
}
validateQuery(query);
if (count) {