| 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, |
| }; |
|
|