Skip to content

Commit 169fbe5

Browse files
committed
add inital data migration
1 parent 0d6b30f commit 169fbe5

File tree

3 files changed

+117
-2
lines changed

3 files changed

+117
-2
lines changed

migrations/1697208335927-CreateRoleToPermissionsTable.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,20 @@ export class CreateRoleToPermissionsTable1697208335927 implements MigrationInter
1515
indices: [
1616
{ columnNames: ['role_id'] },
1717
{ columnNames: ['role_id', 'permission_id'] },
18+
],
19+
foreignKeys: [
20+
{
21+
columnNames: ['role_id'],
22+
referencedColumnNames: ['id'],
23+
referencedTableName: 'roles',
24+
onDelete: 'CASCADE',
25+
},
26+
{
27+
columnNames: ['permission_id'],
28+
referencedColumnNames: ['id'],
29+
referencedTableName: 'permissions',
30+
onDelete: 'CASCADE',
31+
}
1832
]
1933
}))
2034
}
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
1-
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"
1+
import { MigrationInterface, QueryRunner, TableColumn, TableForeignKey } from "typeorm"
22

33
export class AddColumnRoleIdToUsersTable1699245515021 implements MigrationInterface {
44

55
public async up(queryRunner: QueryRunner): Promise<void> {
66
await queryRunner.addColumn('users', new TableColumn({
77
name: "role_id",
88
type: "int8",
9-
default: 1, //admin
9+
isNullable: true,
10+
foreignKeyConstraintName: "fk_users_role_id",
11+
}));
12+
13+
await queryRunner.createForeignKey('users', new TableForeignKey({
14+
columnNames: ['role_id'],
15+
referencedColumnNames: ['id'],
16+
referencedTableName: 'roles',
17+
onDelete: 'SET NULL',
18+
name: "fk_users_role_id",
1019
}))
1120
}
1221

1322
public async down(queryRunner: QueryRunner): Promise<void> {
1423
await queryRunner.dropColumn('users', 'role_id');
24+
25+
await queryRunner.dropForeignKey('users', 'fk_users_role_id');
1526
}
1627

1728
}
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm"
2+
3+
export class CreateInitialData1699262051499 implements MigrationInterface {
4+
5+
public async up(queryRunner: QueryRunner): Promise<void> {
6+
/* Create Permission */
7+
await queryRunner.connect();
8+
9+
const query = queryRunner.manager.createQueryBuilder();
10+
11+
await query.insert().into('roles', ['name', 'key', 'description']).values([
12+
{
13+
name: 'Admin',
14+
key: 'admin',
15+
description: 'Super User',
16+
}
17+
]).execute()
18+
19+
await query.insert().into('permissions', ['name', 'path', 'actions']).values([
20+
{
21+
name: "User",
22+
path: "users",
23+
actions: `["list", "create"]`,
24+
},
25+
{
26+
name: "User {*}",
27+
path: "users/*",
28+
actions: `["update", "show", "delete"]`,
29+
},
30+
{
31+
name: "access_control",
32+
path: "access_control",
33+
actions: "[]",
34+
},
35+
{
36+
name: "Roles",
37+
path: "roles",
38+
actions: `["list", "create"]`,
39+
},
40+
{
41+
name: "Roles {*}",
42+
path: "roles/*",
43+
actions: `["update", "show", "delete"]`,
44+
},
45+
{
46+
name: "Permissions",
47+
path: "permissions",
48+
actions: `["list", "create"]`,
49+
},
50+
{
51+
name: "Permissions",
52+
path: "permissions/*",
53+
actions: `["update", "show", "delete"]`,
54+
},
55+
]).execute()
56+
57+
/* get admin role ID */
58+
const adminRole = await query
59+
.select('role.id')
60+
.from("roles", 'role')
61+
.where({ key: 'admin' })
62+
.getRawOne();
63+
64+
/* get all permissions ids */
65+
const permissionIds = await query
66+
.select('permission.id')
67+
.from("permissions", 'permission')
68+
.getRawMany();
69+
70+
71+
/* assign all permissions to admin */
72+
await query
73+
.insert()
74+
.into('role_to_permissions')
75+
.values(permissionIds.map((permission) => ({ role_id: adminRole.id, permission_id: permission.id })))
76+
.execute();
77+
78+
/* update superadmin role */
79+
await query
80+
.update('users')
81+
.set({ role_id: adminRole.id })
82+
.where({ email: '[email protected]' })
83+
.execute()
84+
85+
}
86+
87+
public async down(queryRunner: QueryRunner): Promise<void> {
88+
}
89+
90+
}

0 commit comments

Comments
 (0)