mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-15 11:34:24 +03:00
cddd23f926
This frees us up to enforce one single point of access, thus paving the way towards allowing us to initialize the models at are request, and not when it's require(). addresses #2170
53 lines
1.8 KiB
JavaScript
53 lines
1.8 KiB
JavaScript
var _ = require('lodash'),
|
|
Models = require('../models'),
|
|
errors = require('../errors');
|
|
|
|
var effective = {
|
|
user: function (id) {
|
|
return Models.User.findOne({id: id}, { include: ['permissions', 'roles', 'roles.permissions'] })
|
|
.then(function (foundUser) {
|
|
var seenPerms = {},
|
|
rolePerms = _.map(foundUser.related('roles').models, function (role) {
|
|
return role.related('permissions').models;
|
|
}),
|
|
allPerms = [],
|
|
user = foundUser.toJSON();
|
|
|
|
// TODO: using 'Owner' as return value is a bit hacky.
|
|
if (user.roles[0] && user.roles[0].name === 'Owner') {
|
|
return 'Owner';
|
|
}
|
|
|
|
rolePerms.push(foundUser.related('permissions').models);
|
|
|
|
_.each(rolePerms, function (rolePermGroup) {
|
|
_.each(rolePermGroup, function (perm) {
|
|
var key = perm.get('action_type') + '-' + perm.get('object_type') + '-' + perm.get('object_id');
|
|
|
|
// Only add perms once
|
|
if (seenPerms[key]) {
|
|
return;
|
|
}
|
|
|
|
allPerms.push(perm);
|
|
seenPerms[key] = true;
|
|
});
|
|
});
|
|
|
|
return allPerms;
|
|
}, errors.logAndThrowError);
|
|
},
|
|
|
|
app: function (appName) {
|
|
return Models.App.findOne({name: appName}, { withRelated: ['permissions'] })
|
|
.then(function (foundApp) {
|
|
if (!foundApp) {
|
|
return [];
|
|
}
|
|
|
|
return foundApp.related('permissions').models;
|
|
}, errors.logAndThrowError);
|
|
}
|
|
};
|
|
|
|
module.exports = effective; |