mirror of
https://github.com/strapi/strapi.git
synced 2025-11-02 19:04:38 +00:00
Fix is-creator condition not applied on find (#9213)
* Fix is-creator condition not applied on find * Add test
This commit is contained in:
parent
3f1fa39ccb
commit
54af039f17
@ -14,7 +14,7 @@ describe('Permissions Manager', () => {
|
||||
model: 'foo',
|
||||
});
|
||||
|
||||
expect(pm.query).toStrictEqual({});
|
||||
expect(pm.getQuery()).toStrictEqual({});
|
||||
});
|
||||
|
||||
test('It should returns a valid query from the ability', () => {
|
||||
@ -27,7 +27,17 @@ describe('Permissions Manager', () => {
|
||||
|
||||
const expected = { _or: [{ kai: 'doe' }] };
|
||||
|
||||
expect(pm.query).toStrictEqual(expected);
|
||||
expect(pm.getQuery()).toStrictEqual(expected);
|
||||
});
|
||||
|
||||
test('It should throw if no action is defined', () => {
|
||||
const ability = defineAbility(can => can('read', 'foo', ['bar'], { kai: 'doe' }));
|
||||
const pm = createPermissionsManager({
|
||||
ability,
|
||||
model: 'foo',
|
||||
});
|
||||
|
||||
expect(() => pm.getQuery()).toThrowError();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@ -14,10 +14,6 @@ module.exports = ({ ability, action, model }) => ({
|
||||
action,
|
||||
model,
|
||||
|
||||
get query() {
|
||||
return buildStrapiQuery(buildCaslQuery(ability, action, model));
|
||||
},
|
||||
|
||||
get isAllowed() {
|
||||
return this.ability.can(action, model);
|
||||
},
|
||||
@ -30,10 +26,19 @@ module.exports = ({ ability, action, model }) => ({
|
||||
return this.sanitize(data, { ...options, isOutput: false });
|
||||
},
|
||||
|
||||
queryFrom(query) {
|
||||
getQuery(queryAction = action) {
|
||||
if (_.isUndefined(queryAction)) {
|
||||
throw new Error('Action must be defined to build a permission query');
|
||||
}
|
||||
|
||||
return buildStrapiQuery(buildCaslQuery(ability, queryAction, model));
|
||||
},
|
||||
|
||||
queryFrom(query = {}, action) {
|
||||
const permissionQuery = this.getQuery(action);
|
||||
return {
|
||||
...query,
|
||||
_where: query._where ? _.concat(this.query, query._where) : [this.query],
|
||||
_where: query._where ? _.concat(permissionQuery, query._where) : [permissionQuery],
|
||||
};
|
||||
},
|
||||
|
||||
|
||||
@ -26,7 +26,7 @@ module.exports = {
|
||||
|
||||
const method = has('_q', query) ? 'searchWithRelationCounts' : 'findWithRelationCounts';
|
||||
|
||||
const permissionQuery = permissionChecker.buildPermissionQuery(query);
|
||||
const permissionQuery = permissionChecker.buildReadQuery(query);
|
||||
|
||||
const { results, pagination } = await entityManager[method](permissionQuery, model);
|
||||
|
||||
@ -214,7 +214,7 @@ module.exports = {
|
||||
return ctx.forbidden();
|
||||
}
|
||||
|
||||
const permissionQuery = permissionChecker.buildPermissionQuery(query);
|
||||
const permissionQuery = permissionChecker.buildDeleteQuery(query);
|
||||
|
||||
const idsWhereClause = { [`id_in`]: ids };
|
||||
const params = {
|
||||
|
||||
@ -43,7 +43,10 @@ const createPermissionChecker = ({ userAbility, model }) => {
|
||||
const sanitizeCreateInput = data => sanitizeInput(ACTIONS.create, data);
|
||||
const sanitizeUpdateInput = entity => data => sanitizeInput(ACTIONS.update, data, entity);
|
||||
|
||||
const buildPermissionQuery = query => permissionsManager.queryFrom(query);
|
||||
const buildPermissionQuery = (query, action) => permissionsManager.queryFrom(query, action);
|
||||
|
||||
const buildReadQuery = query => buildPermissionQuery(query, ACTIONS.read);
|
||||
const buildDeleteQuery = query => buildPermissionQuery(query, ACTIONS.delete);
|
||||
|
||||
Object.keys(ACTIONS).forEach(action => {
|
||||
can[action] = (...args) => can(ACTIONS[action], ...args);
|
||||
@ -56,7 +59,8 @@ const createPermissionChecker = ({ userAbility, model }) => {
|
||||
sanitizeOutput,
|
||||
sanitizeCreateInput,
|
||||
sanitizeUpdateInput,
|
||||
buildPermissionQuery,
|
||||
buildReadQuery,
|
||||
buildDeleteQuery,
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user