2021-04-28 11:48:21 +02:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
const async = require('async');
|
|
|
|
|
2021-04-28 12:56:19 +02:00
|
|
|
function resolveRoleName(permissions) {
|
|
|
|
if (!permissions || permissions.length === 0) {
|
2021-04-28 11:48:21 +02:00
|
|
|
return 'Viewer';
|
|
|
|
}
|
|
|
|
if (permissions.includes('ADMIN')) {
|
|
|
|
return 'Admin';
|
|
|
|
}
|
|
|
|
return 'Editor';
|
|
|
|
}
|
|
|
|
|
2021-08-12 15:04:37 +02:00
|
|
|
exports.up = function (db, cb) {
|
2021-04-28 12:56:19 +02:00
|
|
|
db.runSql(
|
2021-08-12 15:04:37 +02:00
|
|
|
'SELECT id, permissions from users WHERE id NOT IN (select user_id from role_user);',
|
2021-04-28 12:56:19 +02:00
|
|
|
(err, results) => {
|
|
|
|
if (results.rowCount > 0) {
|
|
|
|
const users = results.rows;
|
2021-08-12 15:04:37 +02:00
|
|
|
const insertRootRole = users.map((u) => {
|
2021-04-28 12:56:19 +02:00
|
|
|
const roleName = resolveRoleName(u.permissions);
|
|
|
|
return db.runSql.bind(
|
|
|
|
db,
|
2021-04-30 13:04:25 +02:00
|
|
|
`INSERT INTO role_user (role_id, user_id)
|
2021-04-28 11:48:21 +02:00
|
|
|
SELECT id, '${u.id}'
|
|
|
|
FROM roles
|
|
|
|
WHERE name = '${roleName}' AND type = 'root';`,
|
2021-04-28 12:56:19 +02:00
|
|
|
);
|
|
|
|
});
|
|
|
|
async.series(insertRootRole, cb);
|
|
|
|
} else {
|
|
|
|
cb();
|
|
|
|
}
|
|
|
|
},
|
|
|
|
);
|
2021-04-28 11:48:21 +02:00
|
|
|
};
|
|
|
|
|
2021-08-12 15:04:37 +02:00
|
|
|
exports.down = function (db, cb) {
|
2021-04-28 11:48:21 +02:00
|
|
|
// We can't just remove roles for users as we don't know if there has been any manual additions.
|
|
|
|
cb();
|
|
|
|
};
|