mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-19 15:25:59 +00:00
57 lines
1.4 KiB
JavaScript
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,
|
|
};
|