diff --git a/lib/Menu.js b/lib/Menu.js index b00142c50..f8ecf6d90 100644 --- a/lib/Menu.js +++ b/lib/Menu.js @@ -16,7 +16,9 @@ var rootpath = process.cwd() + '/', path = require('path'), sys = require('sys'), utils = require('connect').utils, - merge = utils.merge; + merge = utils.merge, + calipso = require(path.join(rootpath, 'lib/calipso')), + PermissionFilter = require(path.join(rootpath, 'lib/Permission')).PermissionFilter; /** * Exports @@ -63,13 +65,32 @@ CalipsoMenu.prototype.setOptions = function(options) { * url: '/admin' -- Url to use as link * security: [/admin/,"bob"] -- regex based on user role */ -CalipsoMenu.prototype.addMenuItem = function(options) { +CalipsoMenu.prototype.addMenuItem = function(req, options) { var self = this; + // The req parameter was added in 0.3.0, if not passed, assuming options only + if(options === undefined) calipso.error("Attempting to add menu item with invalid params, please update your module for the 0.3.0 api, path: " + req.path); + // Refresh the reference, as it is initially loaded at startup var calipso = require(path.join(rootpath, 'lib/calipso')); + // Check security + if(options.permit) { + var permitFn = new PermissionFilter(options.path, options.permit), + permit = permitFn.check(req); + + if(typeof permit !== "object") return; + if(!permit.allow) return; + } + // Admin security is opposite to default + if(self.name === 'admin') { + var isAdmin = req.session.user && req.session.user.isAdmin; + // Admin by default is not shown unless permitted + if (!options.permit && !isAdmin) + return; + } + // Split the path, traverse items and add menuItems. // If you add a child prior to parent, then create the parent. var newItem = self.createPath(options,options.path.split("/")); @@ -150,6 +171,9 @@ CalipsoMenu.prototype.render = function(req, depth) { var self = this; + // If the menu is empty, render nothing + if (self.sortedChildren.length === 0) return ''; + // Get selected items var selected = self.selected(req); diff --git a/lib/Permission.js b/lib/Permission.js index 273bba367..d7cd79b07 100644 --- a/lib/Permission.js +++ b/lib/Permission.js @@ -25,14 +25,20 @@ function PermissionFilter(route, permit) { PermissionFilter.prototype.check = function(req) { if(this.permit) { + var user = req.session.user; + var isAdmin = req.session.user && req.session.user.isAdmin; + if(isAdmin) return {allow:true}; // Admins always access everything + + // Else check for a specific permission if(user) { return this.permit(user); } else { return {allow:false, msg:'You must be a logged in user to view that page'}; } + } else { - return {allow:true}; + return {allow:true}; } } @@ -46,31 +52,75 @@ var PermissionHelpers = { // Holder of defined permissions permissions: {}, sortedPermissions: [], + structuredPermissions: {}, + + // Clear all oaded permissions + clearPermissionRoles: function() { + + var self = this; + for(var perm in self.permissions) { + delete self.permissions[perm].roles; + self.permissions[perm].roles = []; + } + + }, // Add a permission addPermission: function(permission, description, isCrud) { var self = this, calipso = require(path.join(rootpath, 'lib/calipso')); - // Add Permission always resets it if it already exists - self.permissions[permission] = {roles: [], queries:[], description: description}; - self.sortedPermissions.push(permission); - // if Crud, automatically add level below - calipso.lib._.map(["create","view","update","delete"], function(crudAction) { - var crudPermission = permission + ":" + crudAction; - self.permissions[crudPermission] = {roles: [], queries:[], description: description}; - self.sortedPermissions.push(crudPermission); - }) + if(isCrud) { + calipso.lib._.map(["view","create","update","delete"], function(crudAction) { + var crudPermission = permission + ":" + crudAction; + self.permissions[crudPermission] = {roles: [], queries:[], description: description}; + self.sortedPermissions.push(crudPermission); + }) + } else { + + // Add Permission always resets it if it already exists + self.permissions[permission] = {roles: [], queries:[], description: description}; + self.sortedPermissions.push(permission); + + } + }, + + structureAndSort: function() { + + var self = this; + + // This could be done by the permissions module self.sortedPermissions.sort(function(a,b) { return a < b; }); + // Now we need to create our permissions object structure + self.sortedPermissions.forEach(function(value) { + + var path = value.split(":"), target = self.structuredPermissions, counter = 0; + + while (path.length > 1) { + key = path.shift(); + if (!target[key] || typeof target[key] !== 'object') { + target[key] = {}; + } + target = target[key]; + } + + // Set the specified value in the nested JSON structure + key = path.shift(); + if(typeof target[key] !== "object") { + target[key] = self.permissions[value].roles; + } + + }); + }, // Add a map between role / permission (this is loaded via the user module) - addRolePermission: function(role, permission) { + addPermissionRole: function(permission, role) { var self = this, calipso = require(path.join(rootpath, 'lib/calipso')); @@ -79,7 +129,7 @@ var PermissionHelpers = { self.permissions[permission].roles.push(role); return true; } else { - calipso.error("Attempted to map role: " + role + " to a permission: " + permission +" that does not exist (perhaps related to a disabled module?)."); + calipso.warn("Attempted to map role: " + role + " to a permission: " + permission +" that does not exist (perhaps related to a disabled module?)."); return false; } @@ -96,18 +146,19 @@ var PermissionHelpers = { // Does a user have a permission hasPermission: function(permission) { - - var self = this, calipso = require(path.join(rootpath, 'lib/calipso')); - var permissionRoles = self.permissions[permission] ? self.permissions[permission].roles : []; - + + var self = this; + // Curried filter return function(user) { + var calipso = require(path.join(rootpath, 'lib/calipso')); + // Check if the user has a role that maps to the permission - var userRoles = user.roles; + var userRoles = user.roles, permissionRoles = self.permissions[permission] ? self.permissions[permission].roles : []; // Check if allowed based on intersection of user roles and roles that have permission - var isAllowed = calipso.lib._.intersect(permissionRoles,userRoles).length > 0; + var isAllowed = calipso.lib._.intersect(permissionRoles, userRoles).length > 0; return {allow:isAllowed, msg:'You do not have any of the roles required to view this page or perform that action'}; } diff --git a/lib/Router.js b/lib/Router.js index eb91659d8..3fd87428d 100644 --- a/lib/Router.js +++ b/lib/Router.js @@ -177,7 +177,7 @@ var Router = function (moduleName, modulePath) { res.layout = "admin"; } - // Check to see if it requires admin access + /* Check to see if it requires admin access var isAdmin = req.session.user && req.session.user.isAdmin; if (route.admin && !isAdmin) { req.flash('error', req.t('You need to be an administrative user to view that page.')); @@ -195,7 +195,7 @@ var Router = function (moduleName, modulePath) { res.redirect("/"); group()(); return; - } + }*/ // Check to see if it requires logged in user access if (route.permit) { diff --git a/modules/core/admin/admin.js b/modules/core/admin/admin.js index a0e339598..c700ab8d9 100644 --- a/modules/core/admin/admin.js +++ b/modules/core/admin/admin.js @@ -15,13 +15,17 @@ exports = module.exports = { */ function route(req, res, module, app, next) { + // Config helpers + var corePermit = calipso.permissions.hasPermission("admin:core:configuration"), + cachePermit = calipso.permissions.hasPermission("admin:core:cache"); + // Menu items - res.menu.admin.addMenuItem({name:'Administration',path:'admin',url:'/admin',description:'Calipso administration ...',security:[]}); - res.menu.admin.addMenuItem({name:'Calipso Core',path:'admin/core',url:'/admin',description:'Manage core settings for Calipso ...',security:[]}); - res.menu.admin.addMenuItem({name:'Configuration Options',path:'admin/core/config',url:'/admin/core/config',description:'Core configuration ...',security:[]}); - res.menu.admin.addMenuItem({name:'View Languages',path:'admin/core/languages',url:'/admin/core/languages',description:'Languages ...',security:[]}); - res.menu.admin.addMenuItem({name:'View Cache',path:'admin/core/cache',url:'/admin/core/cache',description:'Cache ...',security:[]}); - res.menu.admin.addMenuItem({name:'Clear Cache',path:'admin/core/cache/clear',url:'/admin/core/cache/clear',description:'Clear Cache ...',security:[]}); + res.menu.admin.addMenuItem(req, {name:'Administration',path:'admin',url:'/admin',description:'Calipso administration ...',permit:corePermit}); + res.menu.admin.addMenuItem(req, {name:'Calipso Core',path:'admin/core',url:'/admin',description:'Manage core settings for Calipso ...',permit:corePermit}); + res.menu.admin.addMenuItem(req, {name:'Configuration Options',path:'admin/core/config',url:'/admin/core/config',description:'Core configuration ...',permit:corePermit}); + res.menu.admin.addMenuItem(req, {name:'View Languages',path:'admin/core/languages',url:'/admin/core/languages',description:'Languages ...',permit:corePermit}); + res.menu.admin.addMenuItem(req, {name:'View Cache',path:'admin/core/cache',url:'/admin/core/cache',description:'Cache ...',permit:cachePermit}); + res.menu.admin.addMenuItem(req, {name:'Clear Cache',path:'admin/core/cache/clear',url:'/admin/core/cache/clear',description:'Clear Cache ...',permit:cachePermit}); // Routing and Route Handler module.router.route(req, res, next); @@ -40,48 +44,61 @@ function init(module, app, next) { // Add listener to config_update calipso.e.post('CONFIG_UPDATE',module.name,calipso.reloadConfig); + calipso.permissions.addPermission("admin:core:configuration","Manage core configuration."); + calipso.permissions.addPermission("admin:core:cache","View and clear cache."); + // Admin routes calipso.lib.step( function defineRoutes() { + // Permissions + var corePermit = calipso.permissions.hasPermission("admin:core:configuration"), + cachePermit = calipso.permissions.hasPermission("admin:core:cache"); + // Core Administration dashboard module.router.addRoute('GET /admin', showAdmin, { template: 'admin', block: 'admin.show', - admin: true + admin: true, + permit: corePermit }, this.parallel()); // Core configuration module.router.addRoute('GET /admin/core/config', coreConfig, { block: 'admin.show', - admin: true + admin: true, + permit: corePermit }, this.parallel()); module.router.addRoute('POST /admin/core/config/save', saveAdmin, { - admin: true + admin: true, + permit: corePermit }, this.parallel()); module.router.addRoute('GET /admin/core/cache', showCache, { admin: true, template:'cache', - block:'admin.cache' + block:'admin.cache', + permit: cachePermit }, this.parallel()); module.router.addRoute('GET /admin/core/cache/clear', clearCache, { admin: true, template:'cache', - block:'admin.cache' + block:'admin.cache', + permit: cachePermit }, this.parallel()); module.router.addRoute('GET /admin/core/languages', showLanguages, { admin: true, template:'languages', block:'admin.languages', + permit: corePermit }, this.parallel()); - // Default installation routers + // Default installation routers - only accessible in install mode module.router.addRoute('GET /admin/install', install, null, this.parallel()); module.router.addRoute('POST /admin/install', install, null, this.parallel()); module.router.addRoute('POST /admin/installTest/mongo', installMongoTest, null, this.parallel()); diff --git a/modules/core/content/content.js b/modules/core/content/content.js index 6c2393d66..23ed01d53 100644 --- a/modules/core/content/content.js +++ b/modules/core/content/content.js @@ -23,8 +23,13 @@ exports = module.exports = { */ function route(req,res,module,app,next) { - res.menu.admin.addMenuItem({name:'Content Management',path:'cms',url:'/content',description:'Manage content ...',security:[]}); - res.menu.admin.addMenuItem({name:'Content',path:'cms/content',url:'/content',description:'Manage content ...',security:[]}); + var cPerm = calipso.permissions.hasPermission("content:create"), + uPerm = calipso.permissions.hasPermission("content:update"), + dPerm = calipso.permissions.hasPermission("content:delete"), + vPerm = calipso.permissions.hasPermission("content:view"); + + res.menu.admin.addMenuItem(req, {name:'Content Management',path:'cms',url:'/content',description:'Manage content ...',permit:vPerm}); + res.menu.admin.addMenuItem(req, {name:'Content',path:'cms/content',url:'/content',description:'Manage content ...',permit:vPerm}); module.router.route(req,res,next); @@ -42,12 +47,16 @@ function init(module,app,next) { calipso.e.addEvent('CONTENT_CREATE_FORM'); calipso.e.addEvent('CONTENT_UPDATE_FORM'); - // There are dependencies, so we need to track if this is initialised - module.initialised = false; + calipso.permissions.addPermission("content","Manage content.",true); calipso.lib.step( function defineRoutes() { + var cPerm = calipso.permissions.hasPermission("content:create"), + uPerm = calipso.permissions.hasPermission("content:update"), + dPerm = calipso.permissions.hasPermission("content:delete"), + vPerm = calipso.permissions.hasPermission("content:view"); + // Default routes module.router.addRoute('GET /',homePage,{template:'list',block:'content.home'},this.parallel()); @@ -62,14 +71,14 @@ function init(module,app,next) { module.router.addRoute("GET /:alias.:format",showAliasedContent,{template:'show',block:'content.show',cache:true},this.parallel()); // Admin operations - module.router.addRoute('GET /content',listContent,{admin:true,template:'listAdmin',block:'content.list'},this.parallel()); - module.router.addRoute('GET /content/list.:format?',listContent,{admin:true,template:'listAdmin',block:'content.list'},this.parallel()); - module.router.addRoute('POST /content',createContent,{admin:true},this.parallel()); - module.router.addRoute('GET /content/new',createContentForm,{admin:true,block:'content.create'},this.parallel()); - module.router.addRoute('GET /content/show/:id.:format?',showContentByID,{admin:true,template:'show',block:'content.show'},this.parallel()); - module.router.addRoute('GET /content/edit/:id',editContentForm,{admin:true,block:'content.edit'},this.parallel()); - module.router.addRoute('GET /content/delete/:id',deleteContent,{admin:true},this.parallel()); - module.router.addRoute('POST /content/:id',updateContent,{admin:true},this.parallel()); + module.router.addRoute('GET /content',listContent,{admin:true,permit:vPerm,template:'listAdmin',block:'content.list'},this.parallel()); + module.router.addRoute('GET /content/list.:format?',listContent,{admin:true,permit:vPerm,template:'listAdmin',block:'content.list'},this.parallel()); + module.router.addRoute('POST /content',createContent,{admin:true,permit:cPerm},this.parallel()); + module.router.addRoute('GET /content/new',createContentForm,{admin:true,permit:vPerm,block:'content.create'},this.parallel()); + module.router.addRoute('GET /content/show/:id.:format?',showContentByID,{admin:true,permit:vPerm,template:'show',block:'content.show'},this.parallel()); + module.router.addRoute('GET /content/edit/:id',editContentForm,{admin:true,permit:uPerm,block:'content.edit'},this.parallel()); + module.router.addRoute('GET /content/delete/:id',deleteContent,{admin:true,permit:dPerm},this.parallel()); + module.router.addRoute('POST /content/:id',updateContent,{admin:true,permit:uPerm},this.parallel()); }, function done() { @@ -112,8 +121,6 @@ function init(module,app,next) { calipso.lib.mongoose.model('Content', Content); - module.initialised = true; - next(); } @@ -491,10 +498,16 @@ function editContentForm(req,res,template,block,next) { var returnTo = req.moduleParams.returnTo ? req.moduleParams.returnTo : ""; - res.menu.adminToolbar.addMenuItem({name:'List',weight:1,path:'list',url:'/content/',description:'List all ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'View',weight:2,path:'show',url:'/content/show/' + id,description:'Show current ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',weight:3,path:'edit',url:'/content/edit/' + id,description:'Edit content ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',weight:4,path:'delete',url:'/content/delete/' + id,description:'Delete content ...',security:[]}); + + var cPerm = calipso.permissions.hasPermission("content:create"), + uPerm = calipso.permissions.hasPermission("content:update"), + dPerm = calipso.permissions.hasPermission("content:delete"), + vPerm = calipso.permissions.hasPermission("content:view"); + + res.menu.adminToolbar.addMenuItem(req, {name:'List',weight:1,path:'list',url:'/content/',description:'List all ...',permit:vPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',weight:2,path:'show',url:'/content/show/' + id,description:'Show current ...',permit:vPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',weight:3,path:'edit',url:'/content/edit/' + id,description:'Edit content ...',permit:uPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',weight:4,path:'delete',url:'/content/delete/' + id,description:'Delete content ...',permit:dPerm}); Content.findById(id, function(err, c) { @@ -577,7 +590,7 @@ function updateContent(req,res,template,block,next) { // Emit pre event // This does not allow you to change the content - calipso.e.pre_emit('CONTENT_CREATE',c,function(c) { + calipso.e.pre_emit('CONTENT_UPDATE',c,function(c) { c.save(function(err) { if(err) { @@ -739,11 +752,16 @@ function showContent(req,res,template,block,next,err,content,format) { } else { - res.menu.adminToolbar.addMenuItem({name:'Create',weight:3,path:'new',url:'/content/new',description:'Create content ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'List',weight:1,path:'list',url:'/content/',description:'List all ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'View',weight:2,path:'show',url:'/content/show/' + content.id,description:'Show current ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',weight:4,path:'edit',url:'/content/edit/' + content.id,description:'Edit content ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',weight:5,path:'delete',url:'/content/delete/' + content.id,description:'Delete content ...',security:[]}); + var cPerm = calipso.permissions.hasPermission("content:create"), + uPerm = calipso.permissions.hasPermission("content:update"), + dPerm = calipso.permissions.hasPermission("content:delete"), + vPerm = calipso.permissions.hasPermission("content:view"); + + res.menu.adminToolbar.addMenuItem(req, {name:'Create',weight:3,path:'new',url:'/content/new',description:'Create content ...',permit:cPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'List',weight:1,path:'list',url:'/content/',description:'List all ...',permit:vPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',weight:2,path:'show',url:'/content/show/' + content.id,description:'Show current ...',permit:vPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',weight:4,path:'edit',url:'/content/edit/' + content.id,description:'Edit content ...',permit:uPerm}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',weight:5,path:'delete',url:'/content/delete/' + content.id,description:'Delete content ...',permit:dPerm}); } @@ -775,7 +793,10 @@ function listContent(req,res,template,block,next) { // Re-retrieve our object var Content = calipso.lib.mongoose.model('Content'); - res.menu.adminToolbar.addMenuItem({name:'Create',weight:1,path:'new',url:'/content/new',description:'Create content ...',security:[]}); + var cPerm = calipso.permissions.hasPermission("content:create"), + vPerm = calipso.permissions.hasPermission("content:view"); + + res.menu.adminToolbar.addMenuItem(req, {name:'Create',weight:1,path:'new',url:'/content/new',description:'Create content ...',permit:cPerm}); var tag = req.moduleParams.tag ? req.moduleParams.tag : ''; var format = req.moduleParams.format ? req.moduleParams.format : 'html'; @@ -789,7 +810,7 @@ function listContent(req,res,template,block,next) { var query = new Query(); - if(req.session.user && req.session.user.isAdmin) { + if(req.session && req.session.user && vPerm(req.session.user)) { // Show all } else { // Published only if not admin diff --git a/modules/core/contentTypes/contentTypes.js b/modules/core/contentTypes/contentTypes.js index 6141fe5b1..f6234f2d2 100644 --- a/modules/core/contentTypes/contentTypes.js +++ b/modules/core/contentTypes/contentTypes.js @@ -9,7 +9,25 @@ var rootpath = process.cwd() + '/', calipso = require(path.join(rootpath, 'lib/calipso')), Query = require("mongoose").Query; +/** + * Define the routes that this module will repsond to. + */ +var routes = [ + {path:'GET /content/type',fn:listContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:view"),template:'list',block:'content.type.show'}, + {path:'GET /content/type/list.:format?',fn:listContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:view"),template:'list',block:'content.type.list'}, + {path:'POST /content/type/create',fn:createContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:create")}, + {path:'GET /content/type/new',fn:createContentTypeForm,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:create"),block:'content.type.new',template:'form'}, + {path:'GET /content/type/show/:id.:format?',fn:showContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:view"),template:'show',block:'content.type.show'}, + {path:'GET /content/type/edit/:id',fn:editContentTypeForm,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:update"),block:'content.type.edit'}, + {path:'GET /content/type/delete/:id',fn:deleteContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:delete")}, + {path:'POST /content/type/update/:id',fn:updateContentType,admin:true,permit:calipso.permissions.hasPermission("admin:content:type:update")} +] + +/** + * Exports + */ exports = module.exports = { + routes: routes, init: init, route: route, install: install @@ -24,8 +42,7 @@ function route(req,res,module,app,next) { /** * Menu items */ - res.menu.admin.addMenuItem({name:'Content Types',path:'cms/type',url:'/content/type',description:'Manage content types ...',security:[]}); - res.menu.admin.addMenuItem({name:'List Content Types',path:'cms/type',url:'/content/type',description:'List content types ...',security:[]}); + res.menu.admin.addMenuItem(req, {name:'Content Types',path:'cms/type',url:'/content/type',description:'Manage content types ...',permit:calipso.permissions.hasPermission("admin:content:type:view")}); /** * Routing and Route Handler @@ -34,7 +51,6 @@ function route(req,res,module,app,next) { } - /** *Init */ @@ -59,48 +75,30 @@ function init(module,app,next) { // Define permissions calipso.permissions.addPermission("admin:content:type","Manage content types.",true); - calipso.lib.step( - function defineRoutes() { - - // Crud operations - module.router.addRoute('GET /content/type',listContentType,{admin:true,template:'list',block:'content.type.show'},this.parallel()); - module.router.addRoute('GET /content/type/list.:format?',listContentType,{admin:true,template:'list',block:'content.type.list'},this.parallel()); - module.router.addRoute('POST /content/type/create',createContentType,{admin:true},this.parallel()); - module.router.addRoute('GET /content/type/new',createContentTypeForm,{admin:true,block:'content.type.new',template:'form'},this.parallel()); - module.router.addRoute('GET /content/type/show/:id.:format?',showContentType,{admin:true,template:'show',block:'content.type.show'},this.parallel()); - module.router.addRoute('GET /content/type/edit/:id',editContentTypeForm,{admin:true,block:'content.type.edit'},this.parallel()); - module.router.addRoute('GET /content/type/delete/:id',deleteContentType,{admin:true},this.parallel()); - module.router.addRoute('POST /content/type/update/:id',updateContentType,{admin:true},this.parallel()); - - }, - function done() { - - // Schemea - var ContentType = new calipso.lib.mongoose.Schema({ - contentType:{type: String, required: true, unique: true, "default": 'default', index: true}, - description:{type: String, required: true, "default": 'Default Content Type'}, - layout:{type: String, required: true, "default": 'default'}, - ispublic:{type: Boolean, required: true, "default": true}, - created: { type: Date, "default": Date.now }, - updated: { type: Date, "default": Date.now }, - fields: {type: String, "default":""}, - templateLanguage:{type: String, required: true, "default": 'html'}, - viewTemplate:{type: String, "default": ''}, - listTemplate:{type: String, "default": ''}, - }); + // Schemea + var ContentType = new calipso.lib.mongoose.Schema({ + contentType:{type: String, required: true, unique: true, "default": 'default', index: true}, + description:{type: String, required: true, "default": 'Default Content Type'}, + layout:{type: String, required: true, "default": 'default'}, + ispublic:{type: Boolean, required: true, "default": true}, + created: { type: Date, "default": Date.now }, + updated: { type: Date, "default": Date.now }, + fields: {type: String, "default":""}, + templateLanguage:{type: String, required: true, "default": 'html'}, + viewTemplate:{type: String, "default": ''}, + listTemplate:{type: String, "default": ''}, + }); - calipso.lib.mongoose.model('ContentType', ContentType); + calipso.lib.mongoose.model('ContentType', ContentType); - // Cache the content types in the calipso.data object - if(app.config.get('installed')) { - storeContentTypes(null,null,function(){}); - } + // Cache the content types in the calipso.data object + if(app.config.get('installed')) { + storeContentTypes(null,null,function(){}); + } - module.initialised = true; - next(); + module.initialised = true; + next(); - } - ); } /** @@ -239,10 +237,10 @@ function editContentTypeForm(req,res,template,block,next) { var item; - res.menu.adminToolbar.addMenuItem({name:'List',path:'list',url:'/content/type/',description:'List all ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'View',path:'show',url:'/content/type/show/' + id,description:'Current item ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',path:'edit',url:'/content/type/edit/' + id,description:'Edit content type ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',path:'delete',url:'/content/type/delete/' + id,description:'Delete content type ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'List',path:'list',url:'/content/type/',description:'List all ...',permit:calipso.permissions.hasPermission("admin:content:type:view")}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',path:'show',url:'/content/type/show/' + id,description:'Current item ...',permit:calipso.permissions.hasPermission("admin:content:type:view")}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',path:'edit',url:'/content/type/edit/' + id,description:'Edit content type ...',permit:calipso.permissions.hasPermission("admin:content:type:edit")}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',path:'delete',url:'/content/type/delete/' + id,description:'Delete content type ...',permit:calipso.permissions.hasPermission("admin:content:type:delete")}); ContentType.findById(id, function(err, c) { @@ -337,10 +335,10 @@ function showContentType(req,res,template,block,next) { } else { - res.menu.adminToolbar.addMenuItem({name:'List',path:'list',url:'/content/type/',description:'List all ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'View',path:'show',url:'/content/type/show/' + id,description:'Current item ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',path:'edit',url:'/content/type/edit/' + id,description:'Edit content type ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',path:'delete',url:'/content/type/delete/' + id,description:'Delete content type ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'List',path:'list',url:'/content/type/',description:'List all ...',permit:calipso.permissions.hasPermission("admin:content:type:view")}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',path:'show',url:'/content/type/show/' + id,description:'Current item ...',permit:calipso.permissions.hasPermission("admin:content:type:view")}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',path:'edit',url:'/content/type/edit/' + id,description:'Edit content type ...',permit:calipso.permissions.hasPermission("admin:content:type:edit")}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',path:'delete',url:'/content/type/delete/' + id,description:'Delete content type ...',permit:calipso.permissions.hasPermission("admin:content:type:delete")}); item = {id:content._id,type:'content',meta:content.toObject()}; @@ -382,7 +380,7 @@ function listContentType(req,res,template,block,next) { // Re-retrieve our object var ContentType = calipso.lib.mongoose.model('ContentType'); - res.menu.adminToolbar.addMenuItem({name:'New Type',path:'new',url:'/content/type/new',description:'Create content type ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'New Type',path:'new',url:'/content/type/new',description:'Create content type ...',permit:calipso.permissions.hasPermission("admin:content:type:create")}); var format = req.moduleParams.format || 'html'; diff --git a/modules/core/contentVersions/contentVersions.js b/modules/core/contentVersions/contentVersions.js index 6027a4397..2a5c9e859 100644 --- a/modules/core/contentVersions/contentVersions.js +++ b/modules/core/contentVersions/contentVersions.js @@ -43,21 +43,27 @@ function init(module,app,next) { calipso.e.addEvent('CONTENT_VERSION'); // Permissions - calipso.permissions.addPermission("admin:content:versions","Manage content versions.",true); + calipso.permissions.addPermission("content:versions:view","View content versions."); + calipso.permissions.addPermission("content:versions:diff","Diff content versions."); + calipso.permissions.addPermission("content:versions:revert","Revert content versions."); calipso.lib.step( function defineRoutes() { + var vPerm = calipso.permissions.hasPermission("content:versions:view"), + dPerm = calipso.permissions.hasPermission("content:versions:diff"), + rPerm = calipso.permissions.hasPermission("content:versions:revert"); + + // Menus - module.router.addRoute('GET /content/show/:id',showContent,{admin:true},this.parallel()); - module.router.addRoute('GET /content/show/:id',showContent,{admin:true},this.parallel()); + module.router.addRoute('GET /content/show/:id',showContent,{admin:true,permit:vPerm},this.parallel()); // Crud operations - module.router.addRoute('GET /content/show/:id/versions',listVersions,{admin:true,template:'list',block:'content.version'},this.parallel()); - module.router.addRoute('GET /content/show/:id/versions/diff/:a',diffVersion,{admin:true,template:'diff',block:'content.diff'},this.parallel()); - module.router.addRoute('GET /content/show/:id/versions/diff/:a/:b',diffVersion,{admin:true,template:'diff',block:'content.diff'},this.parallel()); - module.router.addRoute('GET /content/show/:id/version/:version',showVersion,{admin:true,template:'show',block:'content.version'},this.parallel()); - module.router.addRoute('GET /content/show/:id/version/:version/revert',revertVersion,{admin:true},this.parallel()); + module.router.addRoute('GET /content/show/:id/versions',listVersions,{admin:true,permit:vPerm,template:'list',block:'content.version'},this.parallel()); + module.router.addRoute('GET /content/show/:id/versions/diff/:a',diffVersion,{admin:true,permit:dPerm,template:'diff',block:'content.diff'},this.parallel()); + module.router.addRoute('GET /content/show/:id/versions/diff/:a/:b',diffVersion,{admin:true,permit:dPerm,template:'diff',block:'content.diff'},this.parallel()); + module.router.addRoute('GET /content/show/:id/version/:version',showVersion,{admin:true,permit:vPerm,template:'show',block:'content.version'},this.parallel()); + module.router.addRoute('GET /content/show/:id/version/:version/revert',revertVersion,{admin:true,permit:rPerm},this.parallel()); }, function done() { @@ -110,8 +116,8 @@ var contentVersionFormSection = { * Show content menu */ function showContent(req,res,template,block,next) { - var id = req.moduleParams.id; - res.menu.adminToolbar.addMenuItem({name:'Versions',weight:10,path:'versions',url:'/content/show/' + id + '/versions',description:'Show versions ...',security:[]}); + var id = req.moduleParams.id, vPerm = calipso.permissions.hasPermission("content:versions:view"); + res.menu.adminToolbar.addMenuItem(req, {name:'Versions',permit:vPerm,weight:10,path:'versions',url:'/content/show/' + id + '/versions',description:'Show versions ...',security:[]}); next(); } @@ -131,6 +137,8 @@ function saveVersion(event, content, next) { calipso.e.pre_emit('CONTENT_VERSION',version); } + console.log("About to save version ..."); + version.save(function(err) { if(err) { @@ -158,8 +166,12 @@ function showVersion(req,res,template,block,next) { var ContentVersion = calipso.lib.mongoose.model('ContentVersion'); - res.menu.adminToolbar.addMenuItem({name:'Return',path:'return',url:'/content/show/' + contentId + '/versions',description:'Show content ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Revert',path:'revert',url:'/content/show/' + contentId + '/version/' + id + '/revert',description:'Revert to this version of content ...',security:[]}); + + var vPerm = calipso.permissions.hasPermission("content:versions:view"), + rPerm = calipso.permissions.hasPermission("content:versions:revert"); + + res.menu.adminToolbar.addMenuItem(req, {name:'Return',path:'return',permit:vPerm,url:'/content/show/' + contentId + '/versions',description:'Show content ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Revert',path:'revert',permit:rPerm,url:'/content/show/' + contentId + '/version/' + id + '/revert',description:'Revert to this version of content ...',security:[]}); ContentVersion.findById(id,function(err,version) { @@ -254,8 +266,11 @@ function listVersions(req,res,template,block,next) { // Re-retrieve our object var ContentVersion = calipso.lib.mongoose.model('ContentVersion'); - res.menu.adminToolbar.addMenuItem({name:'Diff',path:'diff',url:'',description:'Diff versions ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Return',path:'return',url:'/content/show/' + id,description:'Show content ...',security:[]}); + var vPerm = calipso.permissions.hasPermission("content:versions:view"), + dPerm = calipso.permissions.hasPermission("content:versions:diff"); + + res.menu.adminToolbar.addMenuItem(req, {name:'Diff',permit:dPerm,path:'diff',url:'',description:'Diff versions ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Return',permit:vPerm,path:'return',url:'/content/show/' + id,description:'Show content ...',security:[]}); var format = req.moduleParams.format ? req.moduleParams.format : 'html'; diff --git a/modules/core/permissions/permissions.js b/modules/core/permissions/permissions.js index dd9d8ed92..c8edb95a5 100644 --- a/modules/core/permissions/permissions.js +++ b/modules/core/permissions/permissions.js @@ -30,7 +30,7 @@ exports = module.exports = { function route(req, res, module, app, next) { // Menu - res.menu.admin.addMenuItem({name:'Permissions', path: 'admin/security/permissions', weight: 10, url: '/admin/permissions', description: 'Manage permissions ...', security: [] }); + res.menu.admin.addMenuItem(req, {name:'Permissions', path: 'admin/security/permissions', weight: 10, url: '/admin/permissions', description: 'Manage permissions ...', security: [] }); // Router module.router.route(req, res, next); @@ -43,7 +43,9 @@ function route(req, res, module, app, next) { function init(module, app, next) { // Register events for the Content Module - calipso.e.addEvent('PERMISSION_MODIFY'); + calipso.e.addEvent('PERMISSIONS_UPDATE'); + + calipso.e.post('PERMISSIONS_UPDATE',module.name,loadPermissionRoles); var PermissionRole = new calipso.lib.mongoose.Schema({ permission:{type: String, required: true}, @@ -51,7 +53,47 @@ function init(module, app, next) { }); calipso.lib.mongoose.model('PermissionRole', PermissionRole); - next(); + loadPermissionRoles(function(err) { + next(); + }); + +} + +/** + * Load all the permission role mappings into the permissions object + */ +function loadPermissionRoles(next) { + + var perm = calipso.permissions, + PermissionRole = calipso.lib.mongoose.model('PermissionRole'); + + // Clear down first - this may cause strange behaviour to anyone + // making a request at just this moment ... + perm.clearPermissionRoles(); + + // Load the permissions + PermissionRole.find({}).sort('permission',1).sort('role',1).find(function (err, prs) { + prs.forEach(function(pr) { + perm.addPermissionRole(pr.permission, pr.role); + }); + + perm.addPermissionRole("admin:content:type:view","Contributor"); + perm.addPermissionRole("admin:content:type:create","Contributor"); + perm.addPermissionRole("admin:content:type:delete","Contributor"); + +perm.addPermissionRole("admin:core:configuration","Contributor"); + +perm.addPermissionRole("content:view","Contributor"); + +perm.addPermissionRole("content:update","Contributor"); + +perm.addPermissionRole("content:create","Contributor"); + + + perm.structureAndSort(); + + next(); + }); } @@ -60,28 +102,81 @@ function init(module, app, next) { */ function showPermissions(req, res, options, next) { - var permissions = calipso.permissions.permissions, - sortedPermissions = calipso.permissions.sortedPermissions; - var Role = calipso.lib.mongoose.model('Role'); - var PermissionRole = calipso.lib.mongoose.model('PermissionRole'); + var structuredPermissions = calipso.permissions.structuredPermissions, + Role = calipso.lib.mongoose.model('Role'), + PermissionRole = calipso.lib.mongoose.model('PermissionRole'); Role.find({}).sort('name',1).find(function (err, roles) { + var output = renderPermissionTable(structuredPermissions, roles); + calipso.theme.renderItem(req, res, options.templateFn, options.block, {output: output}, next); + }); - PermissionRole.find({}).sort('permission',1).sort('role',1).find(function (err, permissionRoles) { - calipso.theme.renderItem(req, res, options.templateFn, options.block, {permissions: permissions, sortedPermissions:sortedPermissions, roles: roles, permissionRoles: permissionRoles}, next); - }); +} - }); +function renderPermissionTable(structuredPermissions, roles) { + + var output = "
", cols = roles.length; + + // First we need to create the header structure + output += ""; + roles.forEach(function(role,key) { + if(role.name !== 'Administrator') { + output += ""; + } + }) + output += ""; + + var op = []; + op = recursePermissions(structuredPermissions, '', 0, op); + + op.forEach(function(item) { + if(calipso.permissions.permissions[item.key]) { + output += ""; + roles.forEach(function(role) { + if(role.name !== 'Administrator') { + var roleValue = calipso.permissions.permissions[item.key].roles.indexOf(role.name) >= 0 ? true : false; + output += "" + } + }) + output += "" + } else { + output += ""; + } + }) + output += "
Permissions" + role.name + "
" + item.perm + ""; + output += "" + output += "" + output += "
" + item.perm + "
"; + output += ""; + output += "
"; + return output; + +} + + +function recursePermissions(perms, key, count, op) { + + if(typeof perms === "object") { + for(var perm in perms) { + var newKey = key ? key + ':' + perm : perm; + op.push({key:newKey,perm:perm, depth: count}); + if(!calipso.permissions.permissions[newKey]) { + recursePermissions(perms[perm], newKey, count + 1, op); + } + } + } + return op; } + + /** * Update permissions */ function updatePermissions(req, res, options, next) { - calipso.theme.renderItem(req, res, template, block, {}, next); - + } /** diff --git a/modules/core/permissions/templates/permissions.html b/modules/core/permissions/templates/permissions.html index 7ad97142f..04a05ddef 100644 --- a/modules/core/permissions/templates/permissions.html +++ b/modules/core/permissions/templates/permissions.html @@ -1,15 +1,6 @@

Manage Site Permissions

- - + <%- output %>
\ No newline at end of file diff --git a/modules/core/scheduler/scheduler.js b/modules/core/scheduler/scheduler.js index bf552d6f0..25ea5b010 100644 --- a/modules/core/scheduler/scheduler.js +++ b/modules/core/scheduler/scheduler.js @@ -23,7 +23,7 @@ function route(req,res,module,app,next) { * Menu items */ //res.menu.admin.primary.push({name:req.t('Scheduler'),url:'/scheduler',regexp:/scheduler/}); - res.menu.admin.addMenuItem({name:'Scheduled Jobs',path:'admin/core/scheduler',url:'/scheduler',description:'Manage scheduled jobs ...',security:[]}); + res.menu.admin.addMenuItem(req, {name:'Scheduled Jobs',path:'admin/core/scheduler',url:'/scheduler',description:'Manage scheduled jobs ...',security:[]}); /** * Routes @@ -192,7 +192,7 @@ function enableScheduler(req,res,template,block,next) { */ function schedulerAdmin(req,res,template,block,next) { - res.menu.adminToolbar.addMenuItem({name:'New Job',path:'new',url:'/scheduler/new',description:'Create new job ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'New Job',path:'new',url:'/scheduler/new',description:'Create new job ...',security:[]}); var ScheduledJob = calipso.lib.mongoose.model('ScheduledJob'); @@ -350,9 +350,9 @@ function editJobForm(req,res,template,block,next) { //res.menu.admin.secondary.push({name:req.t('New Job'),parentUrl:'/scheduler',url:'/scheduler/new'}); //res.menu.admin.secondary.push({name:req.t('Edit Job'),parentUrl:'/scheduler',url:'/scheduler/edit/' + jobName}); - res.menu.adminToolbar.addMenuItem({name:'View',path:'show',url:'/scheduler/show/' + jobName,description:'Current item ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',path:'edit',url:'/scheduler/edit/' + jobName,description:'Edit schedule ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',path:'delete',url:'/scheduler/delete/' + jobName,description:'Delete schedule ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',path:'show',url:'/scheduler/show/' + jobName,description:'Current item ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',path:'edit',url:'/scheduler/edit/' + jobName,description:'Edit schedule ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',path:'delete',url:'/scheduler/delete/' + jobName,description:'Delete schedule ...',security:[]}); ScheduledJob.findOne({name:jobName}, function(err, job) { @@ -479,9 +479,9 @@ function showJob(req,res,template,block,next,err) { var jobName = req.moduleParams.jobName; var item; - res.menu.adminToolbar.addMenuItem({name:'View',path:'show',url:'/scheduler/show/' + jobName,description:'Current item ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',path:'edit',url:'/scheduler/edit/' + jobName,description:'Edit schedule ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',path:'delete',url:'/scheduler/delete/' + jobName,description:'Delete schedule ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'View',path:'show',url:'/scheduler/show/' + jobName,description:'Current item ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',path:'edit',url:'/scheduler/edit/' + jobName,description:'Edit schedule ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',path:'delete',url:'/scheduler/delete/' + jobName,description:'Delete schedule ...',security:[]}); ScheduledJob.findOne({name:jobName}, function(err, job) { diff --git a/modules/core/tagcloud/tagcloud.js b/modules/core/tagcloud/tagcloud.js index e006c0cd4..6e035ffab 100644 --- a/modules/core/tagcloud/tagcloud.js +++ b/modules/core/tagcloud/tagcloud.js @@ -104,8 +104,6 @@ function mapReduceTagCloud(event,options,next) { }); - - }; /** diff --git a/modules/core/taxonomy/taxonomy.js b/modules/core/taxonomy/taxonomy.js index 8b8be03bb..3a927ecb2 100644 --- a/modules/core/taxonomy/taxonomy.js +++ b/modules/core/taxonomy/taxonomy.js @@ -139,7 +139,7 @@ function taxonomy(req,res,template,block,next) { // Render the item into the response tax.forEach(function(item) { //TODO: This needs to be improved! - res.menu.primary.addMenuItem({name:item._id,path:item._id,url:'/section/' + item._id,description:'Link ...',security:[]}); + res.menu.primary.addMenuItem(req, {name:item._id,path:item._id,url:'/section/' + item._id,description:'Link ...',security:[]}); }); next(); }); diff --git a/modules/core/user/user.js b/modules/core/user/user.js index 6bd51040c..7e13a5df5 100644 --- a/modules/core/user/user.js +++ b/modules/core/user/user.js @@ -19,10 +19,10 @@ exports = module.exports = { function route(req, res, module, app, next) { // Menu - res.menu.admin.addMenuItem({name:'Security', path: 'admin/security', weight: 5, url:'', description: 'Users, Roles & Permissions ...', security: [] }); - res.menu.admin.addMenuItem({name:'Users', path: 'admin/security/users', weight: 10, url: '/user/list', description: 'Manage users ...', security: [] }); - res.menu.admin.addMenuItem({name:'Roles', path: 'admin/security/roles', weight: 10, url: '/admin/roles/list', description: 'Manage roles ...', security: [] }); - res.menu.admin.addMenuItem({name:'Logout', path:'admin/logout', weight: 100, url: '/user/logout', description: 'Logout', security: [] }); + res.menu.admin.addMenuItem(req, {name:'Security', path: 'admin/security', weight: 5, url:'', description: 'Users, Roles & Permissions ...', security: [] }); + res.menu.admin.addMenuItem(req, {name:'Users', path: 'admin/security/users', weight: 10, url: '/user/list', description: 'Manage users ...', security: [] }); + res.menu.admin.addMenuItem(req, {name:'Roles', path: 'admin/security/roles', weight: 10, url: '/admin/roles/list', description: 'Manage roles ...', security: [] }); + res.menu.admin.addMenuItem(req, {name:'Logout', path:'admin/logout', weight: 100, url: '/user/logout', description: 'Logout', security: [] }); // Router module.router.route(req, res, next); @@ -325,7 +325,7 @@ function updateUserForm(req, res, template, block, next) { var roleSection = 3; // Update if changing sections if(isAdmin) { - res.menu.adminToolbar.addMenuItem({name:'Return',path:'return',url:'/user/profile/'+username,description:'Show user ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Return',path:'return',url:'/user/profile/'+username,description:'Show user ...',security:[]}); } var userForm = { @@ -838,14 +838,14 @@ function userProfile(req, res, template, block, next) { } if(req.session.user && req.session.user.isAdmin) { - res.menu.adminToolbar.addMenuItem({name:'List',weight:2,path:'list',url:'/user/list',description:'List users ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Edit',weight:1,path:'edit',url:'/user/profile/' + username + '/edit',description:'Edit user details ...',security:[]}); - res.menu.adminToolbar.addMenuItem({name:'Delete',weight:3,path:'delete',url:'/user/profile/' + username + '/delete',description:'Delete account ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'List',weight:2,path:'list',url:'/user/list',description:'List users ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Edit',weight:1,path:'edit',url:'/user/profile/' + username + '/edit',description:'Edit user details ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Delete',weight:3,path:'delete',url:'/user/profile/' + username + '/delete',description:'Delete account ...',security:[]}); if(u.locked){ - res.menu.adminToolbar.addMenuItem({name:'Unlock',weight:4,path:'unlock',url:'/user/profile/' + username + '/unlock',description:'Unlock account ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Unlock',weight:4,path:'unlock',url:'/user/profile/' + username + '/unlock',description:'Unlock account ...',security:[]}); } else { - res.menu.adminToolbar.addMenuItem({name:'Lock',weight:5,path:'lock',url:'/user/profile/' + username + '/lock',description:'Lock account ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Lock',weight:5,path:'lock',url:'/user/profile/' + username + '/lock',description:'Lock account ...',security:[]}); } } @@ -901,7 +901,7 @@ function listUsers(req,res,template,block,next) { // Re-retrieve our object var User = calipso.lib.mongoose.model('User'); - res.menu.adminToolbar.addMenuItem({name:'Register New User',path:'new',url:'/user/register',description:'Register new user ...',security:[]}); + res.menu.adminToolbar.addMenuItem(req, {name:'Register New User',path:'new',url:'/user/register',description:'Register new user ...',security:[]}); var format = req.moduleParams.format ? req.moduleParams.format : 'html'; var from = req.moduleParams.from ? parseInt(req.moduleParams.from) - 1 : 0; diff --git a/themes/core/cleanslate/templates/admin.html b/themes/core/cleanslate/templates/admin.html index 29a8d5b47..20982a6ac 100644 --- a/themes/core/cleanslate/templates/admin.html +++ b/themes/core/cleanslate/templates/admin.html @@ -16,14 +16,10 @@
diff --git a/themes/core/cleanslate/templates/default.html b/themes/core/cleanslate/templates/default.html index e8f685156..e395262de 100644 --- a/themes/core/cleanslate/templates/default.html +++ b/themes/core/cleanslate/templates/default.html @@ -7,10 +7,7 @@ Clean Slate - - <% if (user.isAdmin) { %> - <% } %> @@ -30,11 +27,9 @@
<%- messages %>
- <% if(user.isAdmin) { %>
<%- getMenu('adminToolbar') %>
- <% } %>
<%- body %> diff --git a/themes/core/cleanslate/templates/default/adminMenu.html b/themes/core/cleanslate/templates/default/adminMenu.html index ef265d232..97283bdea 100644 --- a/themes/core/cleanslate/templates/default/adminMenu.html +++ b/themes/core/cleanslate/templates/default/adminMenu.html @@ -1,3 +1 @@ -<% if(user.isAdmin) { %> - <%- getMenu('admin') %> -<% } %> +<%- getMenu('admin') %> diff --git a/themes/core/cleanslate/templates/default/styles.html b/themes/core/cleanslate/templates/default/styles.html index 6a9495b3f..dec59456e 100644 --- a/themes/core/cleanslate/templates/default/styles.html +++ b/themes/core/cleanslate/templates/default/styles.html @@ -4,10 +4,7 @@ - -<% if(user.isAdmin) { %> -<% } %>