From 0655833da974be73f446c46a0fc8c736f34ed835 Mon Sep 17 00:00:00 2001 From: Jim Laurie Date: Thu, 30 Nov 2017 12:27:04 +0100 Subject: [PATCH] Add users count by role --- .../config/queries/bookshelf.js | 12 + .../config/queries/mongoose.js | 11 + .../config/roles.json | 564 +++++++++++++++++- .../services/UsersPermissions.js | 6 +- 4 files changed, 587 insertions(+), 6 deletions(-) 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 4e6c22371f..b5cedcc68e 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 28e924af80..3c72c5a228 100644 --- a/packages/strapi-plugin-users-permissions/config/roles.json +++ b/packages/strapi-plugin-users-permissions/config/roles.json @@ -2,11 +2,569 @@ "0": { "description": "", "name": "Administrator", - "permissions": {} + "permissions": { + "content-manager": { + "controllers": { + "contentmanager": { + "models": { + "enabled": true, + "policy": "" + }, + "find": { + "enabled": true, + "policy": "" + }, + "count": { + "enabled": true, + "policy": "" + }, + "findOne": { + "enabled": true, + "policy": "" + }, + "create": { + "enabled": true, + "policy": "" + }, + "update": { + "enabled": true, + "policy": "" + }, + "delete": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + } + } + }, + "content-type-builder": { + "controllers": { + "contenttypebuilder": { + "getModels": { + "enabled": true, + "policy": "" + }, + "getModel": { + "enabled": true, + "policy": "" + }, + "getConnections": { + "enabled": true, + "policy": "" + }, + "createModel": { + "enabled": true, + "policy": "" + }, + "updateModel": { + "enabled": true, + "policy": "" + }, + "deleteModel": { + "enabled": true, + "policy": "" + }, + "autoReload": { + "enabled": true, + "policy": "" + }, + "checkTableExists": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + } + } + }, + "settings-manager": { + "controllers": { + "settingsmanager": { + "menu": { + "enabled": true, + "policy": "" + }, + "environments": { + "enabled": true, + "policy": "" + }, + "languages": { + "enabled": true, + "policy": "" + }, + "databases": { + "enabled": true, + "policy": "" + }, + "database": { + "enabled": true, + "policy": "" + }, + "databaseModel": { + "enabled": true, + "policy": "" + }, + "get": { + "enabled": true, + "policy": "" + }, + "update": { + "enabled": true, + "policy": "" + }, + "createLanguage": { + "enabled": true, + "policy": "" + }, + "deleteLanguage": { + "enabled": true, + "policy": "" + }, + "createDatabase": { + "enabled": true, + "policy": "" + }, + "updateDatabase": { + "enabled": true, + "policy": "" + }, + "deleteDatabase": { + "enabled": true, + "policy": "" + }, + "autoReload": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + } + } + }, + "users-permissions": { + "controllers": { + "auth": { + "callback": { + "enabled": true, + "policy": "" + }, + "register": { + "enabled": true, + "policy": "" + }, + "forgotPassword": { + "enabled": true, + "policy": "" + }, + "changePassword": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + }, + "user": { + "find": { + "enabled": true, + "policy": "" + }, + "findOne": { + "enabled": true, + "policy": "" + }, + "create": { + "enabled": true, + "policy": "" + }, + "update": { + "enabled": true, + "policy": "" + }, + "destroy": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + }, + "userspermissions": { + "createRole": { + "enabled": true, + "policy": "" + }, + "deleteProvider": { + "enabled": true, + "policy": "" + }, + "deleteRole": { + "enabled": true, + "policy": "" + }, + "getPermissions": { + "enabled": true, + "policy": "" + }, + "getPolicies": { + "enabled": true, + "policy": "" + }, + "getRole": { + "enabled": true, + "policy": "" + }, + "getRoles": { + "enabled": true, + "policy": "" + }, + "index": { + "enabled": true, + "policy": "" + }, + "init": { + "enabled": true, + "policy": "" + }, + "searchUsers": { + "enabled": true, + "policy": "" + }, + "updateRole": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + } + } + }, + "application": { + "controllers": { + "article": { + "find": { + "enabled": true, + "policy": "" + }, + "findOne": { + "enabled": true, + "policy": "" + }, + "create": { + "enabled": true, + "policy": "" + }, + "update": { + "enabled": true, + "policy": "" + }, + "destroy": { + "enabled": true, + "policy": "" + }, + "identity": { + "enabled": true, + "policy": "" + } + } + } + } + } }, "1": { "description": "", "name": "Guest", - "permissions": {} + "permissions": { + "content-manager": { + "controllers": { + "contentmanager": { + "models": { + "enabled": true, + "policy": "" + }, + "find": { + "enabled": false, + "policy": "" + }, + "count": { + "enabled": false, + "policy": "" + }, + "findOne": { + "enabled": false, + "policy": "" + }, + "create": { + "enabled": false, + "policy": "" + }, + "update": { + "enabled": false, + "policy": "" + }, + "delete": { + "enabled": false, + "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" + } + } + } + }, + "content-type-builder": { + "controllers": { + "contenttypebuilder": { + "getModels": { + "enabled": false, + "policy": "" + }, + "getModel": { + "enabled": false, + "policy": "" + }, + "getConnections": { + "enabled": false, + "policy": "" + }, + "createModel": { + "enabled": false, + "policy": "" + }, + "updateModel": { + "enabled": false, + "policy": "" + }, + "deleteModel": { + "enabled": false, + "policy": "" + }, + "autoReload": { + "enabled": false, + "policy": "" + }, + "checkTableExists": { + "enabled": false, + "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" + } + } + } + }, + "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": "" + }, + "deleteDatabase": { + "enabled": false, + "policy": "" + }, + "autoReload": { + "enabled": false, + "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" + } + } + } + }, + "users-permissions": { + "controllers": { + "auth": { + "callback": { + "enabled": true, + "policy": "" + }, + "register": { + "enabled": true, + "policy": "" + }, + "forgotPassword": { + "enabled": false, + "policy": "" + }, + "changePassword": { + "enabled": false, + "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" + } + }, + "user": { + "find": { + "enabled": false, + "policy": "" + }, + "findOne": { + "enabled": false, + "policy": "" + }, + "create": { + "enabled": false, + "policy": "" + }, + "update": { + "enabled": false, + "policy": "" + }, + "destroy": { + "enabled": false, + "policy": "" + }, + "identity": { + "enabled": false, + "policy": "" + } + }, + "userspermissions": { + "createRole": { + "enabled": false, + "policy": "" + }, + "deleteProvider": { + "enabled": false, + "policy": "" + }, + "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": "" + } + } + } + }, + "application": { + "controllers": { + "article": { + "find": { + "enabled": false, + "policy": "" + }, + "findOne": { + "enabled": false, + "policy": "" + }, + "create": { + "enabled": false, + "policy": "" + }, + "update": { + "enabled": false, + "policy": "" + }, + "destroy": { + "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;