Skip to content

Commit 021c5fe

Browse files
committed
build role adapter
1 parent 68b2797 commit 021c5fe

File tree

5 files changed

+105
-19
lines changed

5 files changed

+105
-19
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm"
2+
3+
export class AddColumnRoleIdToUsersTable1699245515021 implements MigrationInterface {
4+
5+
public async up(queryRunner: QueryRunner): Promise<void> {
6+
await queryRunner.addColumn('users', new TableColumn({
7+
name: "role_id",
8+
type: "int8",
9+
default: 1, //admin
10+
}))
11+
}
12+
13+
public async down(queryRunner: QueryRunner): Promise<void> {
14+
await queryRunner.dropColumn('users', 'role_id');
15+
}
16+
17+
}

src/admin/misc/misc.controller.ts

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,46 @@
1-
import { Controller, Get, Header } from '@nestjs/common';
1+
import { Controller, Get, Header, Req } from '@nestjs/common';
2+
import { Request } from 'express';
3+
import { UseJwtGuard } from 'src/common/guards/jwt.guard';
4+
import { MiscService } from './misc.service';
25

36
@Controller('misc')
47
export class MiscController {
58

9+
constructor(
10+
private miscService: MiscService,
11+
) {}
12+
613
@Get('/permissions')
7-
@Header('content-type', 'text/plain')
8-
getPermission() {
14+
@UseJwtGuard()
15+
// @Header('content-type', 'text/plain')
16+
async getPermission(
17+
@Req() req: Request
18+
) {
19+
console.log(req.user);
20+
21+
return await this.miscService.getUserPermission(req.user.id);
22+
923
return `
10-
p, admin, posts, (list)|(create)
11-
p, admin, posts/*, (edit)|(show)|(delete)
12-
p, admin, posts/*, field
24+
p, admin, posts, (list)|(create)
25+
p, admin, posts/*, (edit)|(show)|(delete)
26+
p, admin, posts/*, field
1327
14-
p, admin, users, (list)|(create)
15-
p, admin, users/*, (edit)|(show)|(delete)
28+
p, admin, users, (list)|(create)
29+
p, admin, users/*, (edit)|(show)|(delete)
1630
17-
p, admin, roles, (list)|(create)
18-
p, admin, roles/*, (edit)|(show)|(delete)
31+
p, admin, roles, (list)|(create)
32+
p, admin, roles/*, (edit)|(show)|(delete)
1933
20-
p, admin, access_control
34+
p, admin, access_control
2135
22-
p, admin, permissions, (list)|(create)
23-
p, admin, permissions/*, (edit)|(show)|(delete)
36+
p, admin, permissions, (list)|(create)
37+
p, admin, permissions/*, (edit)|(show)|(delete)
2438
25-
p, editor, posts, (list)|(create)
26-
p, editor, posts/*, (edit)|(show)
27-
p, editor, posts/hit, field, deny
39+
p, editor, posts, (list)|(create)
40+
p, editor, posts/*, (edit)|(show)
41+
p, editor, posts/hit, field, deny
2842
29-
p, editor, categories, list
43+
p, editor, categories, list
3044
`;
3145
}
3246
}

src/admin/misc/misc.module.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,13 @@
11
import { Module } from '@nestjs/common';
22
import { MiscController } from './misc.controller';
33
import { MiscService } from './misc.service';
4+
import { TypeOrmModule } from '@nestjs/typeorm';
5+
import { User } from 'src/entities/user.entity';
46

57
@Module({
8+
imports: [
9+
TypeOrmModule.forFeature([User]),
10+
],
611
controllers: [MiscController],
712
providers: [MiscService]
813
})

src/admin/misc/misc.service.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,46 @@
11
import { Injectable } from '@nestjs/common';
2+
import { InjectRepository } from '@nestjs/typeorm';
3+
import { RoleToPermission } from 'src/entities/role-to-permission.entity';
4+
import { User } from 'src/entities/user.entity';
5+
import { Repository } from 'typeorm';
26

37
@Injectable()
4-
export class MiscService {}
8+
export class MiscService {
9+
10+
constructor(
11+
@InjectRepository(User)
12+
private userRepository: Repository<User>,
13+
) {}
14+
15+
16+
async getUserPermission(userId: number) {
17+
const user = await this.userRepository.findOne({
18+
where: {
19+
id: userId
20+
},
21+
relations: {
22+
role: {
23+
permissions: {
24+
permission: true
25+
},
26+
}
27+
}
28+
})
29+
30+
const permissions = user.role.permissions;
31+
let buildPermissionCasbin = '';
32+
permissions.forEach((item: RoleToPermission) => {
33+
console.log(item.permission);
34+
let actions = item.permission.actions.map((x: string) => `(${x})`).join('|');
35+
buildPermissionCasbin += `p, ${user.role.key}, ${item.permission.path}, ${actions}${"\n"}`
36+
})
37+
38+
console.log(buildPermissionCasbin.trim());
39+
return {
40+
role: user.role.key,
41+
permissions,
42+
casbin_permission_adapter: buildPermissionCasbin.trim()
43+
}
44+
45+
}
46+
}

src/entities/user.entity.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { strRandom } from 'src/common/utils';
2-
import { Entity, Column, PrimaryGeneratedColumn, BeforeInsert, UpdateDateColumn, CreateDateColumn } from 'typeorm';
2+
import { Entity, Column, PrimaryGeneratedColumn, BeforeInsert, UpdateDateColumn, CreateDateColumn, OneToOne, JoinColumn } from 'typeorm';
33
import { v4 } from 'uuid'
4+
import { Role } from './role.entity';
45
@Entity({
56
name: 'users'
67
})
@@ -26,6 +27,9 @@ export class User {
2627
@Column()
2728
name: string;
2829

30+
@Column()
31+
role_id: string;
32+
2933
@Column()
3034
avatar: string;
3135

@@ -54,6 +58,10 @@ export class User {
5458
@CreateDateColumn()
5559
created_at: Date
5660

61+
@OneToOne(type => Role)
62+
@JoinColumn({ name: "role_id" })
63+
role: Role;
64+
5765
@BeforeInsert()
5866
beforeInsert() {
5967
this.code = strRandom(6)

0 commit comments

Comments
 (0)