Skip to content

Commit aa89ca5

Browse files
committed
Plugin Permissions based on user roles
1 parent a8de801 commit aa89ca5

File tree

7 files changed

+65
-6
lines changed

7 files changed

+65
-6
lines changed

plugins/ipam/controllers/index.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
var path = require('path');
2-
var ipobj = require('../models/ipobj');
2+
var pluginHelpers = require('../../../src/helpers/plugins');
3+
var ipObj = require('../models/ipobj');
4+
var pluginJson = require('../plugin.json');
35

46
var controller = {};
57

68
controller.get = function(req, res) {
9+
//Check plugin Permissions
10+
if (!pluginHelpers.checkPermissions(req.user.role, pluginJson.permissions))
11+
return res.redirect('/plugins');
12+
713
var self = this;
814
self.content = {};
915
self.content.title = "IPAM";
@@ -19,7 +25,7 @@ controller.get = function(req, res) {
1925
// ipaddress: '192.168.1.1'
2026
// });
2127

22-
ipobj.getAll(function(err, ipos) {
28+
ipObj.getAll(function(err, ipos) {
2329
if (err) return res.render('error', err);
2430

2531
self.content.data.ipobjs = ipos;
@@ -29,4 +35,6 @@ controller.get = function(req, res) {
2935
};
3036

3137

38+
39+
3240
module.exports = controller;

plugins/ipam/plugin.json

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,7 @@
77
"class": "material-icons",
88
"icon": "desktop_windows"
99
}
10-
}
10+
},
11+
12+
"permissions": "admin mod support"
1113
}

src/helpers/hbs/helpers.js

+17
Original file line numberDiff line numberDiff line change
@@ -568,6 +568,22 @@ var helpers = {
568568
}
569569
},
570570

571+
checkPlugin: function(user, permissions, options) {
572+
if (user === undefined || permissions === undefined)
573+
return options.inverse(this);
574+
var pluginPermissions = permissions.split(' ');
575+
var result = false;
576+
for (var i = 0; i < pluginPermissions.length; i++) {
577+
if (pluginPermissions[i] == user.role)
578+
result = true;
579+
}
580+
581+
if (result)
582+
return options.fn(this);
583+
else
584+
return options.inverse(this);
585+
},
586+
571587
checkEditSelf: function(user, owner, perm, options) {
572588
var P = require('../../permissions');
573589
if (P.canThis(user.role, perm + ':editSelf')) {
@@ -663,6 +679,7 @@ helpers.foreach = helpers.forEach;
663679
helpers.canUser = helpers.checkPerm;
664680
helpers.canUserRole = helpers.checkRole;
665681
helpers.canEditSelf = helpers.checkEditSelf;
682+
helpers.hasPluginPerm = helpers.checkPlugin;
666683
helpers.inArray = helpers.hasGroup;
667684

668685

src/helpers/plugins/index.js

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
. .o8 oooo
3+
.o8 "888 `888
4+
.o888oo oooo d8b oooo oooo .oooo888 .ooooo. .oooo.o 888 oooo
5+
888 `888""8P `888 `888 d88' `888 d88' `88b d88( "8 888 .8P'
6+
888 888 888 888 888 888 888ooo888 `"Y88b. 888888.
7+
888 . 888 888 888 888 888 888 .o o. )88b 888 `88b.
8+
"888" d888b `V88V"V8P' `Y8bod88P" `Y8bod8P' 8""888P' o888o o888o
9+
========================================================================
10+
Created: 02/03/2017
11+
Author: Chris Brame
12+
13+
**/
14+
15+
var pluginHelpers = {};
16+
17+
pluginHelpers.checkPermissions = function(userRole, permissions) {
18+
if (userRole === undefined || permissions === undefined)
19+
return false;
20+
21+
var permissionArray = permissions.split(' ');
22+
var result = false;
23+
for (var i = 0; i < permissionArray.length; i++) {
24+
if (userRole.toString().toLowerCase() == permissionArray[i].toString().toLowerCase())
25+
result = true;
26+
}
27+
28+
return result;
29+
};
30+
31+
32+
module.exports = pluginHelpers;

src/helpers/viewdata/index.js

-1
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,6 @@ viewController.getPluginsInfo = function(request, callback) {
327327
var pluginPackage = require(path.join(dir, '/plugin.json'));
328328
plugins.push(pluginPackage);
329329
}, function() {
330-
console.log(plugins);
331330
return callback(null, _.sortBy(plugins, 'name'));
332331
});
333332

src/middleware/index.js

-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ module.exports = function(app, db, callback) {
104104
if (err) throw err;
105105
var plugin = require(path.join(dir, 'plugin.json'));
106106
var pluginPublic = path.join(dir, '/public');
107-
console.log(plugin.name);
108107
app.use('/plugins/' + plugin.name, express.static(pluginPublic));
109108
}, function() {
110109
next(null, store);

src/views/partials/nav.hbs

+3-1
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,9 @@
6767
</a>
6868
<ul id="side-nav-sub-plugins" class="side-nav-sub {{#is nav 'plugins'}} subMenuOpen {{/is}}">
6969
{{#each data.common.plugins}}
70-
<li {{#is ../subnav name}} class='active' {{/is}}><a href="{{menu.main.link}}"><i class="fa-sub-icon {{menu.main.class}}">{{menu.main.icon}}</i>{{menu.main.name}}</a></li>
70+
{{#hasPluginPerm ../data.user permissions}}
71+
<li {{#is ../subnav name}} class='active' {{/is}}><a href="{{menu.main.link}}"><i class="fa-sub-icon {{menu.main.class}}">{{menu.main.icon}}</i>{{menu.main.name}}</a></li>
72+
{{/hasPluginPerm}}
7173
{{/each}}
7274
</ul>
7375
</li>

0 commit comments

Comments
 (0)