|
|
const { User } = require("../../../models/user"); |
|
|
const { ROLES } = require("../../middleware/multiUserProtected"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function validRoleSelection(currentUser = {}, newUserParams = {}) { |
|
|
if (!newUserParams.hasOwnProperty("role")) |
|
|
return { valid: true, error: null }; |
|
|
if (currentUser.role === ROLES.admin) return { valid: true, error: null }; |
|
|
if (currentUser.role === ROLES.manager) { |
|
|
const validRoles = [ROLES.manager, ROLES.default]; |
|
|
if (!validRoles.includes(newUserParams.role)) |
|
|
return { valid: false, error: "Invalid role selection for user." }; |
|
|
return { valid: true, error: null }; |
|
|
} |
|
|
return { valid: false, error: "Invalid condition for caller." }; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function canModifyAdmin(userToModify, updates) { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!updates.hasOwnProperty("role")) return { valid: true, error: null }; |
|
|
if (userToModify.role !== ROLES.admin) return { valid: true, error: null }; |
|
|
if (updates.role === userToModify.role) return { valid: true, error: null }; |
|
|
|
|
|
const adminCount = await User.count({ role: ROLES.admin }); |
|
|
if (adminCount - 1 <= 0) |
|
|
return { |
|
|
valid: false, |
|
|
error: "No system admins will remain if you do this. Update failed.", |
|
|
}; |
|
|
return { valid: true, error: null }; |
|
|
} |
|
|
|
|
|
function validCanModify(currentUser, existingUser) { |
|
|
if (currentUser.role === ROLES.admin) return { valid: true, error: null }; |
|
|
if (currentUser.role === ROLES.manager) { |
|
|
const validRoles = [ROLES.manager, ROLES.default]; |
|
|
if (!validRoles.includes(existingUser.role)) |
|
|
return { valid: false, error: "Cannot perform that action on user." }; |
|
|
return { valid: true, error: null }; |
|
|
} |
|
|
|
|
|
return { valid: false, error: "Invalid condition for caller." }; |
|
|
} |
|
|
|
|
|
module.exports = { |
|
|
validCanModify, |
|
|
validRoleSelection, |
|
|
canModifyAdmin, |
|
|
}; |
|
|
|