Adds count class level permission (#3814)
* Adds count class level permission * fixup! Adds count class level permission * Adds missing count property on beforeFind request object * nits
This commit is contained in:
@@ -744,6 +744,9 @@ DatabaseController.prototype.find = function(className, query, {
|
||||
const isMaster = acl === undefined;
|
||||
const aclGroup = acl || [];
|
||||
op = op || (typeof query.objectId == 'string' && Object.keys(query).length === 1 ? 'get' : 'find');
|
||||
// Count operation if counting
|
||||
op = (count === true ? 'count' : op);
|
||||
|
||||
let classExists = true;
|
||||
return this.loadSchema()
|
||||
.then(schemaController => {
|
||||
|
||||
@@ -137,7 +137,7 @@ function verifyPermissionKey(key) {
|
||||
}
|
||||
}
|
||||
|
||||
const CLPValidKeys = Object.freeze(['find', 'get', 'create', 'update', 'delete', 'addField', 'readUserFields', 'writeUserFields']);
|
||||
const CLPValidKeys = Object.freeze(['find', 'count', 'get', 'create', 'update', 'delete', 'addField', 'readUserFields', 'writeUserFields']);
|
||||
function validateCLP(perms, fields) {
|
||||
if (!perms) {
|
||||
return;
|
||||
@@ -820,7 +820,7 @@ export default class SchemaController {
|
||||
|
||||
// No matching CLP, let's check the Pointer permissions
|
||||
// And handle those later
|
||||
const permissionField = ['get', 'find'].indexOf(operation) > -1 ? 'readUserFields' : 'writeUserFields';
|
||||
const permissionField = ['get', 'find', 'count'].indexOf(operation) > -1 ? 'readUserFields' : 'writeUserFields';
|
||||
|
||||
// Reject create when write lockdown
|
||||
if (permissionField == 'writeUserFields' && operation == 'create') {
|
||||
|
||||
@@ -155,11 +155,12 @@ export function getRequestObject(triggerType, auth, parseObject, originalParseOb
|
||||
return request;
|
||||
}
|
||||
|
||||
export function getRequestQueryObject(triggerType, auth, query, config) {
|
||||
export function getRequestQueryObject(triggerType, auth, query, count, config) {
|
||||
var request = {
|
||||
triggerName: triggerType,
|
||||
query: query,
|
||||
query,
|
||||
master: false,
|
||||
count,
|
||||
log: config.loggerController
|
||||
};
|
||||
|
||||
@@ -298,6 +299,7 @@ export function maybeRunQueryTrigger(triggerType, className, restWhere, restOpti
|
||||
if (restWhere) {
|
||||
parseQuery._where = restWhere;
|
||||
}
|
||||
let count = false;
|
||||
if (restOptions) {
|
||||
if (restOptions.include && restOptions.include.length > 0) {
|
||||
parseQuery._include = restOptions.include.split(',');
|
||||
@@ -308,8 +310,9 @@ export function maybeRunQueryTrigger(triggerType, className, restWhere, restOpti
|
||||
if (restOptions.limit) {
|
||||
parseQuery._limit = restOptions.limit;
|
||||
}
|
||||
count = !!restOptions.count;
|
||||
}
|
||||
const requestObject = getRequestQueryObject(triggerType, auth, parseQuery, config);
|
||||
const requestObject = getRequestQueryObject(triggerType, auth, parseQuery, count, config);
|
||||
return Promise.resolve().then(() => {
|
||||
return trigger(requestObject);
|
||||
}).then((result) => {
|
||||
|
||||
Reference in New Issue
Block a user