UNPKG

butterscotch.admin-permissions

Version:
78 lines (76 loc) 3.09 kB
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){ } }