diff --git a/src/privileges/helpers.js b/src/privileges/helpers.js index 01bd609ece..cda8eca5b9 100644 --- a/src/privileges/helpers.js +++ b/src/privileges/helpers.js @@ -46,20 +46,11 @@ async function isAllowedToCids(privilege, uidOrGroupName, cids) { return cids.map(() => false); } + const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege); + // Group handling if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) { - const groupKeys = []; - cids.forEach(function (cid) { - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - const sets = await Promise.all([ - groups.isMemberOfGroups(uidOrGroupName, groupKeys), - groups.isMemberOfGroups('registered-users', groupKeys), - ]); - return sets[0].reduce((memo, cur, idx) => { - memo.push(cur || sets[1][idx]); - return memo; - }, []); + return await checkIfAllowedGroup(uidOrGroupName, groupKeys); } // User handling @@ -67,31 +58,15 @@ async function isAllowedToCids(privilege, uidOrGroupName, cids) { return await isSystemGroupAllowedToCids(privilege, uidOrGroupName, cids); } - const userKeys = []; - const groupKeys = []; - cids.forEach(function (cid) { - userKeys.push('cid:' + cid + ':privileges:' + privilege); - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - - return await checkIfAllowed(uidOrGroupName, userKeys, groupKeys); + const userKeys = cids.map(cid => 'cid:' + cid + ':privileges:' + privilege); + return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys); } async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) { + const groupKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:groups:' + privilege); // Group handling if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) { - const groupKeys = []; - privileges.forEach(function (privilege) { - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - const sets = await Promise.all([ - groups.isMemberOfGroups(uidOrGroupName, groupKeys), - groups.isMemberOfGroups('registered-users', groupKeys), - ]); - return sets[0].reduce((memo, cur, idx) => { - memo.push(cur || sets[1][idx]); - return memo; - }, []); + return await checkIfAllowedGroup(uidOrGroupName, groupKeys); } // User handling @@ -99,17 +74,11 @@ async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) { return await isSystemGroupAllowedToPrivileges(privileges, uidOrGroupName, cid); } - const userKeys = []; - const groupKeys = []; - privileges.forEach(function (privilege) { - userKeys.push('cid:' + cid + ':privileges:' + privilege); - groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege); - }); - - return await checkIfAllowed(uidOrGroupName, userKeys, groupKeys); + const userKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:' + privilege); + return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys); } -async function checkIfAllowed(uid, userKeys, groupKeys) { +async function checkIfAllowedUser(uid, userKeys, groupKeys) { const [hasUserPrivilege, hasGroupPrivilege] = await Promise.all([ groups.isMemberOfGroups(uid, userKeys), groups.isMemberOfGroupsList(uid, groupKeys), @@ -117,6 +86,14 @@ async function checkIfAllowed(uid, userKeys, groupKeys) { return userKeys.map((key, index) => hasUserPrivilege[index] || hasGroupPrivilege[index]); } +async function checkIfAllowedGroup(groupName, groupKeys) { + const sets = await Promise.all([ + groups.isMemberOfGroups(groupName, groupKeys), + groups.isMemberOfGroups('registered-users', groupKeys), + ]); + return groupKeys.map((key, index) => sets[0][index] || sets[1][index]); +} + async function isSystemGroupAllowedToCids(privilege, uid, cids) { const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege); return await groups.isMemberOfGroups(uidToSystemGroup[uid], groupKeys);