diff --git a/src/middleware/admin.js b/src/middleware/admin.js index 95d92630ca..75697efba9 100644 --- a/src/middleware/admin.js +++ b/src/middleware/admin.js @@ -52,6 +52,7 @@ module.exports = function (middleware) { custom_header: plugins.fireHook('filter:admin.header.build', custom_header), configs: meta.configs.list(), latestVersion: versions.getLatestVersion(), + privileges: privileges.admin.get(req.uid), }); var userData = results.userData; @@ -84,6 +85,7 @@ module.exports = function (middleware) { version: version, latestVersion: results.latestVersion, upgradeAvailable: results.latestVersion && semver.gt(results.latestVersion, version), + privileges: results.privileges, }; templateValues.template = { name: res.locals.template }; diff --git a/src/privileges/admin.js b/src/privileges/admin.js index e3be83b030..630414e8c6 100644 --- a/src/privileges/admin.js +++ b/src/privileges/admin.js @@ -1,9 +1,9 @@ 'use strict'; -// const _ = require('lodash'); +const _ = require('lodash'); -// const user = require('../user'); +const user = require('../user'); const groups = require('../groups'); const helpers = require('./helpers'); const plugins = require('../plugins'); @@ -89,27 +89,17 @@ module.exports = function (privileges) { return payload; }; - // privileges.admin.get = async function (uid) { - // const [userPrivileges, isAdministrator] = await Promise.all([ - // helpers.isUserAllowedTo(privileges.admin.userPrivilegeList, uid, 0), - // user.isAdministrator(uid), - // ]); + privileges.admin.get = async function (uid) { + const [userPrivileges, isAdministrator] = await Promise.all([ + helpers.isUserAllowedTo(privileges.admin.userPrivilegeList, uid, 0), + user.isAdministrator(uid), + ]); - // const privData = _.zipObject(privileges.admin.userPrivilegeList, userPrivileges); + const combined = userPrivileges.map(allowed => allowed || isAdministrator); + const privData = _.zipObject(privileges.admin.userPrivilegeList, combined); - // return await plugins.fireHook('filter:privileges.admin.get', { - // chat: privData.chat || isAdministrator, - // 'upload:post:image': privData['upload:post:image'] || isAdministrator, - // 'upload:post:file': privData['upload:post:file'] || isAdministrator, - // 'search:content': privData['search:content'] || isAdministrator, - // 'search:users': privData['search:users'] || isAdministrator, - // 'search:tags': privData['search:tags'] || isAdministrator, - // 'view:users': privData['view:users'] || isAdministrator, - // 'view:tags': privData['view:tags'] || isAdministrator, - // 'view:groups': privData['view:groups'] || isAdministrator, - // 'view:users:info': privData['view:users:info'] || isAdministrator, - // }); - // }; + return await plugins.fireHook('filter:privileges.admin.get', privData); + }; privileges.admin.can = async function (privilege, uid) { const isUserAllowedTo = await helpers.isUserAllowedTo(privilege, uid, [0]); diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 8fa6165dac..868ea065fc 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -45,14 +45,12 @@ module.exports = function (privileges) { user.isModerator(uid, cid), ]); - const privData = _.zipObject(privs, userPrivileges); + const combined = userPrivileges.map(allowed => allowed || isAdministrator); + const privData = _.zipObject(privs, combined); const isAdminOrMod = isAdministrator || isModerator; return await plugins.fireHook('filter:privileges.categories.get', { - 'topics:create': privData['topics:create'] || isAdministrator, - 'topics:read': privData['topics:read'] || isAdministrator, - 'topics:tag': privData['topics:tag'] || isAdministrator, - read: privData.read || isAdministrator, + ...privData, cid: cid, uid: uid, editable: isAdminOrMod, diff --git a/src/privileges/global.js b/src/privileges/global.js index 6738ff09c3..7b851e1c9a 100644 --- a/src/privileges/global.js +++ b/src/privileges/global.js @@ -71,20 +71,10 @@ module.exports = function (privileges) { user.isAdministrator(uid), ]); - const privData = _.zipObject(privileges.global.userPrivilegeList, userPrivileges); + const combined = userPrivileges.map(allowed => allowed || isAdministrator); + const privData = _.zipObject(privileges.global.userPrivilegeList, combined); - return await plugins.fireHook('filter:privileges.global.get', { - chat: privData.chat || isAdministrator, - 'upload:post:image': privData['upload:post:image'] || isAdministrator, - 'upload:post:file': privData['upload:post:file'] || isAdministrator, - 'search:content': privData['search:content'] || isAdministrator, - 'search:users': privData['search:users'] || isAdministrator, - 'search:tags': privData['search:tags'] || isAdministrator, - 'view:users': privData['view:users'] || isAdministrator, - 'view:tags': privData['view:tags'] || isAdministrator, - 'view:groups': privData['view:groups'] || isAdministrator, - 'view:users:info': privData['view:users:info'] || isAdministrator, - }); + return await plugins.fireHook('filter:privileges.global.get', privData); }; privileges.global.can = async function (privilege, uid) {