|
|
const { SystemSettings } = require("../../models/systemSettings"); |
|
|
const { userFromSession } = require("../http"); |
|
|
const ROLES = { |
|
|
all: "<all>", |
|
|
admin: "admin", |
|
|
manager: "manager", |
|
|
default: "default", |
|
|
}; |
|
|
const DEFAULT_ROLES = [ROLES.admin, ROLES.admin]; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function strictMultiUserRoleValid(allowedRoles = DEFAULT_ROLES) { |
|
|
return async (request, response, next) => { |
|
|
|
|
|
if (allowedRoles.includes(ROLES.all)) { |
|
|
next(); |
|
|
return; |
|
|
} |
|
|
|
|
|
const multiUserMode = |
|
|
response.locals?.multiUserMode ?? |
|
|
(await SystemSettings.isMultiUserMode()); |
|
|
if (!multiUserMode) return response.sendStatus(401).end(); |
|
|
|
|
|
const user = |
|
|
response.locals?.user ?? (await userFromSession(request, response)); |
|
|
if (allowedRoles.includes(user?.role)) { |
|
|
next(); |
|
|
return; |
|
|
} |
|
|
return response.sendStatus(401).end(); |
|
|
}; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function flexUserRoleValid(allowedRoles = DEFAULT_ROLES) { |
|
|
return async (request, response, next) => { |
|
|
|
|
|
|
|
|
if (allowedRoles.includes(ROLES.all)) { |
|
|
next(); |
|
|
return; |
|
|
} |
|
|
|
|
|
|
|
|
const multiUserMode = |
|
|
response.locals?.multiUserMode ?? |
|
|
(await SystemSettings.isMultiUserMode()); |
|
|
if (!multiUserMode) { |
|
|
next(); |
|
|
return; |
|
|
} |
|
|
|
|
|
const user = |
|
|
response.locals?.user ?? (await userFromSession(request, response)); |
|
|
if (allowedRoles.includes(user?.role)) { |
|
|
next(); |
|
|
return; |
|
|
} |
|
|
return response.sendStatus(401).end(); |
|
|
}; |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
async function isMultiUserSetup(_request, response, next) { |
|
|
const multiUserMode = await SystemSettings.isMultiUserMode(); |
|
|
if (!multiUserMode) { |
|
|
response.status(403).json({ |
|
|
error: "Invalid request", |
|
|
}); |
|
|
return; |
|
|
} |
|
|
|
|
|
next(); |
|
|
return; |
|
|
} |
|
|
|
|
|
module.exports = { |
|
|
ROLES, |
|
|
strictMultiUserRoleValid, |
|
|
flexUserRoleValid, |
|
|
isMultiUserSetup, |
|
|
}; |
|
|
|