diff --git a/packages/strapi-plugin-users-permissions/config/queries/bookshelf.js b/packages/strapi-plugin-users-permissions/config/queries/bookshelf.js index 5000c2d3db..e4ffe7bf90 100644 --- a/packages/strapi-plugin-users-permissions/config/queries/bookshelf.js +++ b/packages/strapi-plugin-users-permissions/config/queries/bookshelf.js @@ -82,5 +82,17 @@ module.exports = { .orWhere('email', 'LIKE', `%${params.id}%`); }) .fetchAll(); + }, + + countByRoles: async function () { + const result = await strapi.connections[this.connection].raw('SELECT COUNT("id") AS total, "role" FROM "user" GROUP BY "role";'); + return result.rows.reduce((acc, current) => { + acc.push({ + _id: parseFloat(current.role), + total: parseFloat(current.total) + }); + + return acc; + }, []); } }; diff --git a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js index 6e38eef8e0..4728a2a38f 100644 --- a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js +++ b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js @@ -57,5 +57,16 @@ module.exports = { { email: re } ] }); + }, + + countByRoles: async function () { + return this.aggregate([ + { + $group: { + _id: "$role", + total: {$sum: 1} + } + } + ]); } }; diff --git a/packages/strapi-plugin-users-permissions/config/roles.json b/packages/strapi-plugin-users-permissions/config/roles.json index 3b8720c669..fbf8fc91f5 100644 --- a/packages/strapi-plugin-users-permissions/config/roles.json +++ b/packages/strapi-plugin-users-permissions/config/roles.json @@ -269,7 +269,7 @@ "policy": "" }, "count": { - "enabled": true, + "enabled": false, "policy": "" }, "findOne": { @@ -277,7 +277,7 @@ "policy": "" }, "create": { - "enabled": true, + "enabled": false, "policy": "" }, "update": { @@ -302,23 +302,19 @@ "enabled": false, "policy": "" }, - "updateModel": { + "getModel": { "enabled": false, "policy": "" }, - "checkTableExists": { + "getConnections": { "enabled": false, "policy": "" }, - "autoReload": { - "enabled": true, - "policy": "" - }, "createModel": { "enabled": false, "policy": "" }, - "getModel": { + "updateModel": { "enabled": false, "policy": "" }, @@ -326,11 +322,15 @@ "enabled": false, "policy": "" }, - "identity": { + "autoReload": { "enabled": false, "policy": "" }, - "getConnections": { + "checkTableExists": { + "enabled": false, + "policy": "" + }, + "identity": { "enabled": false, "policy": "" } @@ -340,14 +340,50 @@ "settings-manager": { "controllers": { "settingsmanager": { + "menu": { + "enabled": false, + "policy": "" + }, "environments": { "enabled": false, "policy": "" }, + "languages": { + "enabled": false, + "policy": "" + }, + "databases": { + "enabled": false, + "policy": "" + }, + "database": { + "enabled": false, + "policy": "" + }, + "databaseModel": { + "enabled": false, + "policy": "" + }, + "get": { + "enabled": false, + "policy": "" + }, + "update": { + "enabled": false, + "policy": "" + }, + "createLanguage": { + "enabled": false, + "policy": "" + }, "deleteLanguage": { "enabled": false, "policy": "" }, + "createDatabase": { + "enabled": false, + "policy": "" + }, "updateDatabase": { "enabled": false, "policy": "" @@ -360,45 +396,9 @@ "enabled": false, "policy": "" }, - "update": { - "enabled": false, - "policy": "" - }, - "databaseModel": { - "enabled": false, - "policy": "" - }, - "createLanguage": { - "enabled": false, - "policy": "" - }, - "get": { - "enabled": false, - "policy": "" - }, - "createDatabase": { - "enabled": false, - "policy": "" - }, - "databases": { - "enabled": false, - "policy": "" - }, - "languages": { - "enabled": false, - "policy": "" - }, - "database": { - "enabled": false, - "policy": "" - }, "identity": { "enabled": false, "policy": "" - }, - "menu": { - "enabled": false, - "policy": "" } } } @@ -454,38 +454,6 @@ } }, "userspermissions": { - "searchUsers": { - "enabled": false, - "policy": "" - }, - "deleteRole": { - "enabled": false, - "policy": "" - }, - "getPolicies": { - "enabled": false, - "policy": "" - }, - "getRoles": { - "enabled": false, - "policy": "" - }, - "getRole": { - "enabled": false, - "policy": "" - }, - "getPermissions": { - "enabled": false, - "policy": "" - }, - "init": { - "enabled": true, - "policy": "" - }, - "index": { - "enabled": false, - "policy": "" - }, "createRole": { "enabled": false, "policy": "" @@ -494,17 +462,49 @@ "enabled": false, "policy": "" }, - "identity": { + "deleteRole": { + "enabled": false, + "policy": "" + }, + "getPermissions": { + "enabled": false, + "policy": "" + }, + "getPolicies": { + "enabled": false, + "policy": "" + }, + "getRole": { + "enabled": false, + "policy": "" + }, + "getRoles": { + "enabled": false, + "policy": "" + }, + "index": { + "enabled": false, + "policy": "" + }, + "init": { + "enabled": true, + "policy": "" + }, + "searchUsers": { "enabled": false, "policy": "" }, "updateRole": { "enabled": false, "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" } } } } } } -} +} \ No newline at end of file diff --git a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js index 353d78268c..18e85f3c4d 100644 --- a/packages/strapi-plugin-users-permissions/services/UsersPermissions.js +++ b/packages/strapi-plugin-users-permissions/services/UsersPermissions.js @@ -78,15 +78,15 @@ module.exports = { return _.pick(appRoles, [roleId]); }, - getRoles: () => { + getRoles: async () => { const Service = strapi.plugins['users-permissions'].services.userspermissions; const roles = require(Service.getRoleConfigPath()); + const usersCount = await strapi.query('user', 'users-permissions').countByRoles(); const formattedRoles = Object.keys(roles).reduce((acc, key) => { const role = _.pick(roles[key], ['name', 'description']); _.set(role, 'id', key); - // TODO get number_users - _.set(role, 'nb_users', 0); + _.set(role, 'nb_users', _.get(_.find(usersCount, { _id: parseFloat(key) }), 'total')); acc.push(role); return acc;