Files

57 lines
1.6 KiB
JavaScript
Raw Permalink Normal View History

2026-05-16 15:10:27 +01:00
const { fullPermissions, hasPermission, canAccessConfig } = require("./DashboardPermissions.js");
function grantServiceAccess(req) {
req.dashboardService = true;
req.dashboardPermissions = fullPermissions();
req.dashboardRole = "service";
req.dashboardIsOwner = true;
}
function forbid(res, message = "Forbidden") {
return res.status(403).json({ success: false, error: message });
}
function createPermissionMiddleware(getPermissions) {
return function requirePermission(permission) {
return (req, res, next) => {
if (req.dashboardService) return next();
const perms = getPermissions(req) || req.dashboardPermissions;
if (hasPermission(perms, permission)) return next();
return forbid(res);
};
};
}
function createConfigMiddleware(getPermissions) {
return function requireConfigAccess(mode = "view") {
return (req, res, next) => {
if (req.dashboardService) return next();
const perms = getPermissions(req) || req.dashboardPermissions;
const file = req.params?.file || req.body?.filename;
if (!file) return next();
if (!canAccessConfig(perms, file, mode)) return forbid(res);
return next();
};
};
}
function assertConfigFilesEditable(permissions, files, res) {
if (!permissions) return forbid(res);
for (const file of files) {
if (!canAccessConfig(permissions, file, "edit")) {
return forbid(res, `No permission to edit ${file}.yml`);
}
}
return null;
}
module.exports = {
grantServiceAccess,
forbid,
createPermissionMiddleware,
createConfigMiddleware,
assertConfigFilesEditable,
fullPermissions,
hasPermission,
canAccessConfig,
};