From 027848eaa7eff2c75f69317e1048dfddefe52e02 Mon Sep 17 00:00:00 2001 From: Convly Date: Fri, 12 Jun 2020 10:28:14 +0200 Subject: [PATCH] Fix pr comments (add doc, simplify engine code, add async test condition) Signed-off-by: Convly --- .../services/__tests__/permissions.engine.test.js | 2 +- packages/strapi-admin/services/permission.js | 10 ++++++++++ packages/strapi-admin/services/permission/engine.js | 10 ++-------- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/strapi-admin/services/__tests__/permissions.engine.test.js b/packages/strapi-admin/services/__tests__/permissions.engine.test.js index 3ef0493b0c..14749eb02a 100644 --- a/packages/strapi-admin/services/__tests__/permissions.engine.test.js +++ b/packages/strapi-admin/services/__tests__/permissions.engine.test.js @@ -44,7 +44,7 @@ describe('Permissions Engine', () => { }, }, conditions: { - isBob: user => user.firstname === 'Bob', + isBob: async user => new Promise(resolve => resolve(user.firstname === 'Bob')), isAdmin: user => user.title === 'admin', isCreatedBy: user => ({ created_by: user.firstname }), isContainedIn: { firstname: { $in: ['Alice', 'Foo'] } }, diff --git a/packages/strapi-admin/services/permission.js b/packages/strapi-admin/services/permission.js index e0f42dcffd..5cad48cf94 100644 --- a/packages/strapi-admin/services/permission.js +++ b/packages/strapi-admin/services/permission.js @@ -64,6 +64,11 @@ const assign = async (roleID, permissions = []) => { return newPermissions; }; +/** + * Find all permissions for a user + * @param roles + * @returns {Promise<*[]|*>} + */ const findUserPermissions = async ({ roles }) => { if (!_.isArray(roles)) { return []; @@ -72,6 +77,11 @@ const findUserPermissions = async ({ roles }) => { return strapi.query('permission', 'admin').find({ role_in: roles.map(_.property('id')) }); }; +/** + * Removes unwanted fields from a permission + * @param permission + * @returns {*} + */ const sanitizePermission = permission => _.pick(permission, ['action', 'subject', 'fields', 'conditions']); diff --git a/packages/strapi-admin/services/permission/engine.js b/packages/strapi-admin/services/permission/engine.js index 9cac8ce22f..8ecec4c382 100644 --- a/packages/strapi-admin/services/permission/engine.js +++ b/packages/strapi-admin/services/permission/engine.js @@ -54,17 +54,11 @@ module.exports = conditionProvider => ({ const resolveConditions = map(conditionProvider.get); // Filter conditions, only keeps objects and functions - const filterValidConditions = filter( - condition => _.isFunction(condition) || _.isObject(condition) - ); + const filterValidConditions = filter(_.isObject); // Evaluate the conditions if they're a function, returns the object otherwise const evaluateConditions = conditions => - Promise.all( - conditions.map(async cond => - _.isFunction(cond) ? await cond(user, options) : Promise.resolve(cond) - ) - ); + Promise.all(conditions.map(cond => (_.isFunction(cond) ? cond(user, options) : cond))); // Only keeps 'true' booleans or objects as condition's result const filterValidResults = filter(result => result === true || _.isObject(result));