feat(rbac): add Permission and Role entities, update User entity
This commit is contained in:
@@ -11,3 +11,5 @@ export { Deposit } from './deposit.entity';
|
|||||||
export { Classroom } from './classroom.entity';
|
export { Classroom } from './classroom.entity';
|
||||||
export { Tenant } from './tenant.entity';
|
export { Tenant } from './tenant.entity';
|
||||||
export { ClassroomRental } from './classroom-rental.entity';
|
export { ClassroomRental } from './classroom-rental.entity';
|
||||||
|
export { Permission } from './permission.entity';
|
||||||
|
export { Role } from './role.entity';
|
||||||
|
|||||||
19
backend/src/entities/permission.entity.ts
Normal file
19
backend/src/entities/permission.entity.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';
|
||||||
|
|
||||||
|
@Entity('permissions')
|
||||||
|
export class Permission {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 50, unique: true })
|
||||||
|
code: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 50 })
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 30 })
|
||||||
|
group: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 200, nullable: true })
|
||||||
|
description: string;
|
||||||
|
}
|
||||||
38
backend/src/entities/role.entity.ts
Normal file
38
backend/src/entities/role.entity.ts
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToMany, JoinTable } from 'typeorm';
|
||||||
|
import { Permission } from './permission.entity';
|
||||||
|
import { User } from './user.entity';
|
||||||
|
|
||||||
|
@Entity('roles')
|
||||||
|
export class Role {
|
||||||
|
@PrimaryGeneratedColumn()
|
||||||
|
id: number;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 30, unique: true })
|
||||||
|
name: string;
|
||||||
|
|
||||||
|
@Column({ type: 'varchar', length: 200, nullable: true })
|
||||||
|
description: string;
|
||||||
|
|
||||||
|
@Column({ name: 'is_system', type: 'boolean', default: false })
|
||||||
|
isSystem: boolean;
|
||||||
|
|
||||||
|
@Column({ type: 'tinyint', default: 1 })
|
||||||
|
status: number;
|
||||||
|
|
||||||
|
@CreateDateColumn({ name: 'created_at' })
|
||||||
|
createdAt: Date;
|
||||||
|
|
||||||
|
@UpdateDateColumn({ name: 'updated_at' })
|
||||||
|
updatedAt: Date;
|
||||||
|
|
||||||
|
@ManyToMany(() => Permission)
|
||||||
|
@JoinTable({
|
||||||
|
name: 'role_permissions',
|
||||||
|
joinColumn: { name: 'role_id', referencedColumnName: 'id' },
|
||||||
|
inverseJoinColumn: { name: 'permission_id', referencedColumnName: 'id' },
|
||||||
|
})
|
||||||
|
permissions: Permission[];
|
||||||
|
|
||||||
|
@ManyToMany(() => User, (user) => user.roles)
|
||||||
|
users: User[];
|
||||||
|
}
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
|
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToMany, JoinTable } from 'typeorm';
|
||||||
|
import { Role } from './role.entity';
|
||||||
|
|
||||||
@Entity('users')
|
@Entity('users')
|
||||||
export class User {
|
export class User {
|
||||||
@@ -11,14 +12,14 @@ export class User {
|
|||||||
@Column({ name: 'password_hash', length: 255 })
|
@Column({ name: 'password_hash', length: 255 })
|
||||||
passwordHash: string;
|
passwordHash: string;
|
||||||
|
|
||||||
@Column({ type: 'varchar', length: 20, default: 'operator' })
|
// 移除: @Column({ type: 'varchar', length: 20, default: 'operator' })
|
||||||
role: string;
|
// role: string;
|
||||||
|
|
||||||
@Column({ length: 50, nullable: true })
|
@Column({ length: 50, nullable: true })
|
||||||
name: string;
|
name: string;
|
||||||
|
|
||||||
@Column({ name: 'allowed_menus', type: 'text', nullable: true })
|
// 移除: @Column({ name: 'allowed_menus', type: 'text', nullable: true })
|
||||||
allowedMenus: string;
|
// allowedMenus: string;
|
||||||
|
|
||||||
@Column({ name: 'is_active', default: true })
|
@Column({ name: 'is_active', default: true })
|
||||||
isActive: boolean;
|
isActive: boolean;
|
||||||
@@ -31,4 +32,12 @@ export class User {
|
|||||||
|
|
||||||
@UpdateDateColumn({ name: 'updated_at' })
|
@UpdateDateColumn({ name: 'updated_at' })
|
||||||
updatedAt: Date;
|
updatedAt: Date;
|
||||||
|
|
||||||
|
@ManyToMany(() => Role, (role) => role.users)
|
||||||
|
@JoinTable({
|
||||||
|
name: 'user_roles',
|
||||||
|
joinColumn: { name: 'user_id', referencedColumnName: 'id' },
|
||||||
|
inverseJoinColumn: { name: 'role_id', referencedColumnName: 'id' },
|
||||||
|
})
|
||||||
|
roles: Role[];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user