-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplugin.js
More file actions
109 lines (98 loc) · 2.97 KB
/
plugin.js
File metadata and controls
109 lines (98 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
* We.js user settings plugin main file
*/
module.exports = function loadPlugin(projectPath, Plugin) {
const plugin = new Plugin(__dirname);
plugin.setRoutes({
'get /user-settings': {
controller: 'user-settings',
action: 'getCurrentUserSettings',
responseType: 'json'
}
});
/**
* Fast loader
* For disable auto loader and only load required features
*
* @param {Object} we we.js app
* @param {Function} done callback
*/
plugin.fastLoader = function fastLoader(we, done) {
/**
* user-settings controller
*
* @module Controller
*/
we.controllers['user-settings'] = new we.class.Controller({
/**
* Get user settings action
* Allows extension with we-plugin-user-settings:getCurrentUserSettings hook
*
* @param {Object} req Express.js request
* @param {Object} res Express.js response
*/
getCurrentUserSettings(req, res) {
const we = req.we,
config = we.config,
data = {
appName: config.appName,
appLogo: config.appLogo,
site: config.site,
hostname: config.hostname,
queryDefaultLimit: config.queryDefaultLimit,
queryMaxLimit: config.queryMaxLimit,
locales: config.i18n.locales,
defaultLocale: config.i18n.defaultLocale,
date: config.date, // date settings like dateFormat
plugins: we.pluginNames
};
if (req.isAuthenticated()) {
// add the authenticated user in response:
data.authenticatedUser = req.user;
data.authenticatedUserRoleNames = req.userRoleNames;
// locale:
if (
req.user.language &&
config.i18n.locales.indexOf(req.user.language)
) {
data.activeLocale = req.user.language;
} else {
// authenticated user not have an locale or is invalid:
data.activeLocale = data.defaultLocale;
}
} else {
// unAuthenticated:
data.activeLocale = data.defaultLocale;
}
plugin.setCurrentUserPermissions({
req, res, data
});
we.hooks.trigger(
'we-plugin-user-settings:getCurrentUserSettings',
{
req: req,
res: res,
data: data
}, (err)=> {
if (err) return res.serverError(err);
res.status(200).send(data);
});
}
});
plugin.setCurrentUserPermissions = function(ctx) {
// ctx = {req: req,res: res,data: data}
ctx.data.userPermissions = {};
if (ctx.req.userRoleNames.indexOf('administrator') > -1) {
// skip if user is admin:
return;
}
for (let permission in plugin.we.acl.permissions) {
if (plugin.we.acl.canStatic(permission, ctx.req.userRoleNames)) {
ctx.data.userPermissions[permission] = true;
}
}
};
done();
};
return plugin;
};