From 3fff334de24a1d7e0f7ab355f5ecb06c3f8f05f2 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 15 Sep 2015 19:21:24 -0400 Subject: [PATCH] some priv cleanup --- src/privileges/categories.js | 114 +++++++++++++++++------------------ 1 file changed, 57 insertions(+), 57 deletions(-) diff --git a/src/privileges/categories.js b/src/privileges/categories.js index 4ae73274bc..8e2e9213d1 100644 --- a/src/privileges/categories.js +++ b/src/privileges/categories.js @@ -2,6 +2,7 @@ 'use strict'; var async = require('async'), + _ = require('underscore'), user = require('../user'), categories = require('../categories'), @@ -14,64 +15,60 @@ module.exports = function(privileges) { privileges.categories = {}; privileges.categories.list = function(cid, callback) { - // Method used in admin/category controller to show all users with privs in that given cid + // Method used in admin/category controller to show all users/groups with privs in that given cid + + var privilegeLabels = [ + {name: 'Find category'}, + {name: 'Access & Read'}, + {name: 'Create Topics'}, + {name: 'Reply to Topics'}, + {name: 'Moderate'} + ]; + + var userPrivilegeList = [ + 'find', 'read', 'topics:create', 'topics:reply', 'mods' + ]; + var groupPrivilegeList = [ + 'groups:find', 'groups:read', 'groups:topics:create', 'groups:topics:reply', 'groups:moderate' + ]; + async.parallel({ labels: function(next) { async.parallel({ - users: async.apply(plugins.fireHook, 'filter:privileges.list_human', - ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { - return { - name: name - }; - }) - ), - groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', - ['Find category', 'Access & Read', 'Create Topics', 'Reply to Topics', 'Moderate'].map(function(name) { - return { - name: name - }; - }) - ) + users: async.apply(plugins.fireHook, 'filter:privileges.list_human', privilegeLabels), + groups: async.apply(plugins.fireHook, 'filter:privileges.groups.list_human', privilegeLabels) }, next); }, users: function(next) { var privileges; async.waterfall([ - async.apply(plugins.fireHook, 'filter:privileges.list', [ - 'find', 'read', 'topics:create', 'topics:reply', 'mods' - ]), + async.apply(plugins.fireHook, 'filter:privileges.list', userPrivilegeList), function(privs, next) { privileges = privs; groups.getMembersOfGroups(privs.map(function(privilege) { return 'cid:' + cid + ':privileges:' + privilege; - }), function(err, memberSets) { - if (err) { - return next(err); - } - - next(null, memberSets.map(function(set) { - return set.map(function(uid) { - return parseInt(uid, 10); - }); - })); - }); + }), next); }, function(memberSets, next) { - // Reduce into a single array - var members = memberSets.reduce(function(combined, curMembers) { - return combined.concat(curMembers); - }).filter(function(member, index, combined) { - return combined.indexOf(member) === index; + + memberSets = memberSets.map(function(set) { + return set.map(function(uid) { + return parseInt(uid, 10); }); + }); + + var members = _.unique(_.flatten(memberSets)); user.getMultipleUserFields(members, ['picture', 'username'], function(err, memberData) { - memberData = memberData.map(function(member) { + if (err) { + return next(err); + } + + memberData.forEach(function(member) { member.privileges = {}; for(var x=0,numPrivs=privileges.length;x