butterscotch.admin-permissions
Version:
78 lines (76 loc) • 3.09 kB
JavaScript
var pug = require("pug");
var mymongoose = require("mymongoose");
module.exports={
init:function(adminContext, adminTheme, authenticateAdminUi, adminUserSchema){
var self = this;
adminContext.wrap("addToRes",function(prev, req, res){
prev(req, res);
var link = {
url: '/admin/permissions',
text: 'Permissions'
};
if(self.public.isAuthorized(req, 'viewPermission'))
res.locals.navigationMenu.push(link);
});
adminUserSchema.wrap("modifyAndGetAdminUserSchemaDefinition", function(prev) {
var def = prev();
def.permissions = {}
return def;
});
authenticateAdminUi.wrap('modifyUserBeforeRegister', function (prev, user) {
prev(user);
user.permissions = {};
var schema = adminUserSchema.getAdminUserSchemaDefinition();
for(var permission in schema.permissions) {
user.permissions[permission] = {
allowed : true
}
user.permissions[permission].description = schema.permissions[permission].description.default;
}
console.log(user)
})
this.decorators.register({
name : "addPermission",
initialValue : function(name) {
adminUserSchema.wrap("modifyAndGetAdminUserSchemaDefinition", function(prev) {
var def = prev();
def.permissions[name] = {
allowed : {
default : false,
type : Boolean
},
description : {
default : 'No Description provided',
type : String
},
};
return def;
})
},
executeInOther : false
});
this.decorators.addPermission("viewPermission");
this.decorators.addPermission("modifyPermission");
this.decorators.register({
name : "authorize",
initialValue : function (permission, func) {
return function(req, res, next){
if(req.user.permissions[permission].allowed !== true){
if(func !== undefined)
return func(req, res, next);
return res.render("error.pug")
}
next();
}
}
});
this.decorators.register({
name : "isAuthorized",
initialValue : function (req, permission){
return req.hasOwnProperty('user') && req.user.permissions[permission].allowed === true;
}
});
},
execute:function(config, adminApp, app, adminContext, authenticateAdminUi, postSchema){
}
}