mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-21 16:00:26 +01:00
refactor: less dupe code
This commit is contained in:
@@ -46,20 +46,11 @@ async function isAllowedToCids(privilege, uidOrGroupName, cids) {
|
|||||||
return cids.map(() => false);
|
return cids.map(() => false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege);
|
||||||
|
|
||||||
// Group handling
|
// Group handling
|
||||||
if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) {
|
if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) {
|
||||||
const groupKeys = [];
|
return await checkIfAllowedGroup(uidOrGroupName, 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;
|
|
||||||
}, []);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// User handling
|
// User handling
|
||||||
@@ -67,31 +58,15 @@ async function isAllowedToCids(privilege, uidOrGroupName, cids) {
|
|||||||
return await isSystemGroupAllowedToCids(privilege, uidOrGroupName, cids);
|
return await isSystemGroupAllowedToCids(privilege, uidOrGroupName, cids);
|
||||||
}
|
}
|
||||||
|
|
||||||
const userKeys = [];
|
const userKeys = cids.map(cid => 'cid:' + cid + ':privileges:' + privilege);
|
||||||
const groupKeys = [];
|
return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys);
|
||||||
cids.forEach(function (cid) {
|
|
||||||
userKeys.push('cid:' + cid + ':privileges:' + privilege);
|
|
||||||
groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege);
|
|
||||||
});
|
|
||||||
|
|
||||||
return await checkIfAllowed(uidOrGroupName, userKeys, groupKeys);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) {
|
async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) {
|
||||||
|
const groupKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:groups:' + privilege);
|
||||||
// Group handling
|
// Group handling
|
||||||
if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) {
|
if (isNaN(parseInt(uidOrGroupName, 10)) && (uidOrGroupName || '').length) {
|
||||||
const groupKeys = [];
|
return await checkIfAllowedGroup(uidOrGroupName, 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;
|
|
||||||
}, []);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// User handling
|
// User handling
|
||||||
@@ -99,17 +74,11 @@ async function isAllowedToPrivileges(privileges, uidOrGroupName, cid) {
|
|||||||
return await isSystemGroupAllowedToPrivileges(privileges, uidOrGroupName, cid);
|
return await isSystemGroupAllowedToPrivileges(privileges, uidOrGroupName, cid);
|
||||||
}
|
}
|
||||||
|
|
||||||
const userKeys = [];
|
const userKeys = privileges.map(privilege => 'cid:' + cid + ':privileges:' + privilege);
|
||||||
const groupKeys = [];
|
return await checkIfAllowedUser(uidOrGroupName, userKeys, groupKeys);
|
||||||
privileges.forEach(function (privilege) {
|
|
||||||
userKeys.push('cid:' + cid + ':privileges:' + privilege);
|
|
||||||
groupKeys.push('cid:' + cid + ':privileges:groups:' + privilege);
|
|
||||||
});
|
|
||||||
|
|
||||||
return await checkIfAllowed(uidOrGroupName, userKeys, groupKeys);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async function checkIfAllowed(uid, userKeys, groupKeys) {
|
async function checkIfAllowedUser(uid, userKeys, groupKeys) {
|
||||||
const [hasUserPrivilege, hasGroupPrivilege] = await Promise.all([
|
const [hasUserPrivilege, hasGroupPrivilege] = await Promise.all([
|
||||||
groups.isMemberOfGroups(uid, userKeys),
|
groups.isMemberOfGroups(uid, userKeys),
|
||||||
groups.isMemberOfGroupsList(uid, groupKeys),
|
groups.isMemberOfGroupsList(uid, groupKeys),
|
||||||
@@ -117,6 +86,14 @@ async function checkIfAllowed(uid, userKeys, groupKeys) {
|
|||||||
return userKeys.map((key, index) => hasUserPrivilege[index] || hasGroupPrivilege[index]);
|
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) {
|
async function isSystemGroupAllowedToCids(privilege, uid, cids) {
|
||||||
const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege);
|
const groupKeys = cids.map(cid => 'cid:' + cid + ':privileges:groups:' + privilege);
|
||||||
return await groups.isMemberOfGroups(uidToSystemGroup[uid], groupKeys);
|
return await groups.isMemberOfGroups(uidToSystemGroup[uid], groupKeys);
|
||||||
|
|||||||
Reference in New Issue
Block a user