79 lines
2.1 KiB
JavaScript
79 lines
2.1 KiB
JavaScript
const { tableService } = require('../services');
|
|
const { rowService } = require('../services');
|
|
const { dbTables, constantRoles } = require('../constants');
|
|
|
|
const createDefaultTables = async () => {
|
|
let roleId;
|
|
|
|
// check if the default tables are already created
|
|
const roleTable = tableService.checkTableExists('_roles');
|
|
const usersTable = tableService.checkTableExists('_users');
|
|
const rolesPermissionTable =
|
|
tableService.checkTableExists('_roles_permissions');
|
|
const usersRolesTable = tableService.checkTableExists('_users_roles');
|
|
|
|
// create _users table
|
|
if (!usersTable) {
|
|
// create the _users table
|
|
tableService.createTable('_users', dbTables.userSchema);
|
|
}
|
|
|
|
// create _users_roles table
|
|
if (!usersRolesTable) {
|
|
// create the _users_roles table
|
|
tableService.createTable('_users_roles', dbTables.usersRoleSchema);
|
|
}
|
|
|
|
// create _roles table
|
|
if (!roleTable) {
|
|
// create the _role table
|
|
tableService.createTable('_roles', dbTables.roleSchema);
|
|
|
|
// create a default role in the _roles table
|
|
const role = rowService.save({
|
|
tableName: '_roles',
|
|
fields: { name: constantRoles.DEFAULT_ROLE },
|
|
});
|
|
roleId = role.lastInsertRowid;
|
|
}
|
|
|
|
// create _roles_permissions table
|
|
if (!rolesPermissionTable && roleId) {
|
|
// create the _roles_permissions table
|
|
tableService.createTable(
|
|
'_roles_permissions',
|
|
dbTables.rolePermissionSchema,
|
|
{
|
|
multipleUniqueConstraints: {
|
|
name: 'unique_role_table',
|
|
fields: ['role_id', 'table_name'],
|
|
},
|
|
},
|
|
);
|
|
|
|
// fetch all DB tables
|
|
const tables = tableService.listTables();
|
|
|
|
// add permission for the default role (for each db table)
|
|
const permissions = [];
|
|
for (const table of tables) {
|
|
permissions.push({
|
|
role_id: roleId,
|
|
table_name: table.name,
|
|
create: 'false',
|
|
read: 'true',
|
|
update: 'false',
|
|
delete: 'false',
|
|
});
|
|
}
|
|
|
|
// store the permissions in the db
|
|
rowService.bulkWrite({
|
|
tableName: '_roles_permissions',
|
|
fields: permissions,
|
|
});
|
|
}
|
|
};
|
|
|
|
module.exports = { createDefaultTables };
|