Files
dbgate/packages/api/src/utility/hasPermission.js
Jan Prochazka a1b7ad18af multi user auth
2022-03-21 20:21:07 +01:00

57 lines
1.4 KiB
JavaScript

const { compilePermissions, testPermission } = require('dbgate-tools');
const _ = require('lodash');
const userPermissions = {};
function hasPermission(tested, req) {
const { user } = (req && req.auth) || {};
const key = user || '';
const logins = getLogins();
if (!userPermissions[key] && logins) {
const login = logins.find(x => x.login == user);
userPermissions[key] = compilePermissions(login ? login.permissions : null);
}
return testPermission(tested, userPermissions[key]);
}
let loginsCache = null;
let loginsLoaded = false;
function getLogins() {
if (loginsLoaded) {
return loginsCache;
}
const res = [];
if (process.env.LOGIN && process.env.PASSWORD) {
res.push({
login: process.env.LOGIN,
password: process.env.PASSWORD,
permissions: process.env.PERMISSIONS,
});
}
if (process.env.LOGINS) {
const logins = _.compact(process.env.LOGINS.split(',').map(x => x.trim()));
for (const login of logins) {
const password = process.env[`LOGIN_PASSWORD_${login}`];
const permissions = process.env[`LOGIN_PERMISSIONS_${login}`];
if (password) {
res.push({
login,
password,
permissions,
});
}
}
}
loginsCache = res.length > 0 ? res : null;
loginsLoaded = true;
return loginsCache;
}
module.exports = {
hasPermission,
getLogins,
};