role.entity.ts 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn } from 'typeorm';
  2. import { z } from '@hono/zod-openapi';
  3. export type Permission = string;
  4. export const RoleSchema = z.object({
  5. id: z.number().int().positive().openapi({
  6. description: '角色ID',
  7. example: 1
  8. }),
  9. name: z.string().max(50).openapi({
  10. description: '角色名称,唯一标识',
  11. example: 'admin'
  12. }),
  13. description: z.string().max(500).nullable().openapi({
  14. description: '角色描述',
  15. example: '系统管理员角色'
  16. }),
  17. permissions: z.array(z.string()).min(1).openapi({
  18. description: '角色权限列表',
  19. example: ['user:create', 'user:delete']
  20. }),
  21. createdAt: z.date().openapi({ description: '创建时间' }),
  22. updatedAt: z.date().openapi({ description: '更新时间' })
  23. });
  24. export const CreateRoleDto = RoleSchema.omit({ id: true , createdAt: true, updatedAt: true });
  25. export const UpdateRoleDto = RoleSchema.partial();
  26. @Entity({ name: 'role' })
  27. export class Role {
  28. @PrimaryGeneratedColumn()
  29. id!: number;
  30. @Column({ type: 'varchar', length: 50, unique: true })
  31. name!: string;
  32. @Column({ type: 'text', nullable: true })
  33. description!: string | null;
  34. @Column({ type: 'simple-array', nullable: false })
  35. permissions: Permission[] = [];
  36. @CreateDateColumn({ name: 'created_at', type: 'timestamp' })
  37. createdAt!: Date;
  38. @UpdateDateColumn({ name: 'updated_at', type: 'timestamp' })
  39. updatedAt!: Date;
  40. constructor(partial?: Partial<Role>) {
  41. Object.assign(this, partial);
  42. if (!this.permissions) {
  43. this.permissions = [];
  44. }
  45. }
  46. }