From 8cf8c24ee76eb6c79646ee1333b21a672d3fd942 Mon Sep 17 00:00:00 2001 From: Jim Laurie Date: Wed, 15 Nov 2017 17:27:07 +0100 Subject: [PATCH] Load bookshelf plugins models --- packages/strapi-bookshelf/lib/index.js | 40 ++++++++++++------- .../config/queries/mongoose.js | 2 +- .../controllers/UsersPermissions.js | 8 ++-- 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/packages/strapi-bookshelf/lib/index.js b/packages/strapi-bookshelf/lib/index.js index 1551c49d0c..f6fb9abb12 100755 --- a/packages/strapi-bookshelf/lib/index.js +++ b/packages/strapi-bookshelf/lib/index.js @@ -100,9 +100,13 @@ module.exports = function(strapi) { done(); }); - const mountModels: (models, target) => { + const mountModels = (models, target, plugin = false) => { // Parse every registered model. _.forEach(models, (definition, model) => { + if (plugin) { + definition.globalId = _.upperFirst(_.camelCase(`${plugin}-${model}`)); + } + globalName = _.upperFirst(_.camelCase(definition.globalId)); _.defaults(definition, { @@ -159,7 +163,9 @@ module.exports = function(strapi) { // Initialize the global variable with the // capitalized model name. - global[globalName] = {}; + if (!plugin) { + global[globalName] = {}; + } // Call this callback function after we are done parsing // all attributes for relationships-- see below. @@ -194,8 +200,8 @@ module.exports = function(strapi) { }; _.forEach(lifecycle, (fn, key) => { - if (_.isFunction(strapi.models[model.toLowerCase()][fn])) { - this.on(key, strapi.models[model.toLowerCase()][fn]); + if (_.isFunction(target[model.toLowerCase()][fn])) { + this.on(key, target[model.toLowerCase()][fn]); } }); @@ -204,9 +210,9 @@ module.exports = function(strapi) { attrs = mapper(attrs); return _.isFunction( - strapi.models[model.toLowerCase()]['beforeSave'] + target[model.toLowerCase()]['beforeSave'] ) - ? strapi.models[model.toLowerCase()]['beforeSave'] + ? target[model.toLowerCase()]['beforeSave'] : Promise.resolve(); }); }; @@ -226,16 +232,18 @@ module.exports = function(strapi) { ) ); - global[globalName] = ORM.Model.extend(loadedModel); - global[pluralize(globalName)] = ORM.Collection.extend({ - model: global[globalName] - }); + if (!plugin) { + global[globalName] = ORM.Model.extend(loadedModel); + global[pluralize(globalName)] = ORM.Collection.extend({ + model: global[globalName] + }); - // Expose ORM functions through the `strapi.models` object. - strapi.models[model] = _.assign(global[globalName], strapi.models[model]); + // Expose ORM functions through the `target` object. + target[model] = _.assign(global[globalName], target[model]); + } // Push attributes to be aware of model schema. - strapi.models[model]._attributes = definition.attributes; + target[model]._attributes = definition.attributes; loadedHook(); } catch (err) { @@ -418,7 +426,11 @@ module.exports = function(strapi) { }); }; - mountModels(models); + mountModels(models, strapi.models); + + _.forEach(strapi.plugins, (plugin, name) => { + mountModels(_.pickBy(strapi.plugins[name].models, { connection: connectionName }), plugin.models, name); + }); }); }, diff --git a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js index d2f4c05384..27877b12d1 100644 --- a/packages/strapi-plugin-users-permissions/config/queries/mongoose.js +++ b/packages/strapi-plugin-users-permissions/config/queries/mongoose.js @@ -3,7 +3,7 @@ const _ = require('lodash'); module.exports = { find: async function (params) { return this - .find() + .find(params.where) .limit(Number(params.limit)) .sort(params.sort) .skip(Number(params.skip)); diff --git a/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js index b123f90947..240f5d2c92 100644 --- a/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js +++ b/packages/strapi-plugin-users-permissions/controllers/UsersPermissions.js @@ -26,12 +26,12 @@ module.exports = { }, init: async (ctx) => { - const hasAdmin = await strapi.plugins['users-permissions'].models.user.find({ - admin: true + const hasAdmin = await strapi.query('user', 'users-permissions').find({ + where: { + admin: true + } }); - console.log(await strapi.query('user', 'users-permissions')); - ctx.send({ hasAdmin: !_.isEmpty(hasAdmin) }); } };