ba33d517c1
后端: - 新增 Role / RolePermission 实体(自动 seed 系统角色) - PermissionService——通过 isAdmin / TenantMember 链路解析用户权限 - @Permission() 装饰器 + PermissionsGuard 守卫 - /api/permissions 和 /api/roles REST API - UserController 内联 role 检查迁移到 @Permission() - PermissionModule 全局注册 前端: - usePermissions hook——获取当前用户权限集 - PermissionGate 组件级门控 - PermissionSettingsView——角色列表+权限矩阵编辑页面 - SettingsView 新增「权限管理」Tab(仅 admin 可见) - 权限预览(26 项,7 分类) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
UpdateDateColumn,
|
|
} from 'typeorm';
|
|
import { UserRole } from '../../user/user-role.enum';
|
|
|
|
/**
|
|
* 角色表
|
|
* is_system = true: 系统内置角色(SUPER_ADMIN/TENANT_ADMIN/USER),不可删除
|
|
* tenant_id = null: 系统级角色(所有租户可见)
|
|
* tenant_id != null: 租户自定义角色
|
|
*/
|
|
@Entity('roles')
|
|
export class Role {
|
|
@PrimaryGeneratedColumn('uuid')
|
|
id: string;
|
|
|
|
@Column({ unique: true, length: 50 })
|
|
name: string;
|
|
|
|
@Column({ type: 'text', nullable: true })
|
|
description: string;
|
|
|
|
/** 是否为系统内置角色 */
|
|
@Column({ name: 'is_system', default: false })
|
|
isSystem: boolean;
|
|
|
|
/** 关联的内置角色 enum(仅 is_system=true 时有值) */
|
|
@Column({
|
|
name: 'base_role',
|
|
type: 'simple-enum',
|
|
enum: UserRole,
|
|
nullable: true,
|
|
})
|
|
baseRole: UserRole | null;
|
|
|
|
/** 所属租户:null=系统级,非 null=租户自定义 */
|
|
@Column({ name: 'tenant_id', nullable: true, type: 'text' })
|
|
tenantId: string | null;
|
|
|
|
@CreateDateColumn({ name: 'created_at' })
|
|
createdAt: Date;
|
|
|
|
@UpdateDateColumn({ name: 'updated_at' })
|
|
updatedAt: Date;
|
|
}
|