64 lines
1.8 KiB
TypeScript
64 lines
1.8 KiB
TypeScript
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
|
|
export class AddRbacToAdmin1761597689677 implements MigrationInterface {
|
|
public async up(queryRunner: QueryRunner): Promise<void> {
|
|
const idRoleAdmin = await this.doInsert(queryRunner, 'user_role', {
|
|
name: 'admin',
|
|
});
|
|
console.info('idRoleAdmin', idRoleAdmin);
|
|
const idRoleUserManagement = await this.doInsert(queryRunner, 'user_role', {
|
|
name: 'user_manager',
|
|
});
|
|
console.info('idRoleUserManagement', idRoleUserManagement);
|
|
const idGroupAdmin = await this.doInsert(queryRunner, 'user_group', {
|
|
name: 'admin',
|
|
});
|
|
console.info('idGroupAdmin', idGroupAdmin);
|
|
|
|
|
|
await this.doInsert(queryRunner, 'user_group_roles_user_role', {
|
|
userGroupId: idGroupAdmin,
|
|
userRoleId: idRoleAdmin,
|
|
});
|
|
|
|
await this.doInsert(queryRunner, 'user_group_roles_user_role', {
|
|
userGroupId: idGroupAdmin,
|
|
userRoleId: idRoleUserManagement,
|
|
});
|
|
|
|
const users: object[] = (await queryRunner.query(
|
|
`SELECT * FROM "user" WHERE "username" = $1`,
|
|
['admin'],
|
|
)) as object[];
|
|
let userId: number | undefined = undefined;
|
|
if (users?.length > 0) {
|
|
const user = users[0] as { id: number };
|
|
userId = user.id;
|
|
}
|
|
await this.doInsert(queryRunner, 'user_groups_user_group', {
|
|
userGroupId: idGroupAdmin,
|
|
userId: userId,
|
|
});
|
|
}
|
|
|
|
public async down(_queryRunner: QueryRunner): Promise<void> {
|
|
// await queryRunner.query(
|
|
}
|
|
|
|
private async doInsert(
|
|
queryRunner: QueryRunner,
|
|
table: string,
|
|
values: Record<string, any>,
|
|
): Promise<string> {
|
|
console.info("inserting values",values);
|
|
const insertResult = await queryRunner.manager
|
|
.createQueryBuilder()
|
|
.insert()
|
|
.into(table)
|
|
.values(values)
|
|
.execute();
|
|
|
|
return insertResult.raw[0]?.id as string;
|
|
}
|
|
}
|