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>
103 lines
3.6 KiB
TypeScript
103 lines
3.6 KiB
TypeScript
import { MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
import { TypeOrmModule } from '@nestjs/typeorm';
|
|
import { ScheduleModule } from '@nestjs/schedule';
|
|
import { ServeStaticModule } from '@nestjs/serve-static';
|
|
import { join } from 'path';
|
|
import { APP_GUARD, APP_INTERCEPTOR } from '@nestjs/core';
|
|
import { AppController } from './app.controller';
|
|
import { AppService } from './app.service';
|
|
import { ApiModule } from './api/api.module';
|
|
import { ElasticsearchModule } from './elasticsearch/elasticsearch.module';
|
|
import { UploadModule } from './upload/upload.module';
|
|
import { ChatModule } from './chat/chat.module';
|
|
import { AuthModule } from './auth/auth.module';
|
|
import { I18nModule } from './i18n/i18n.module';
|
|
import { JwtAuthGuard } from './auth/jwt-auth.guard';
|
|
import { CombinedAuthGuard } from './auth/combined-auth.guard';
|
|
import { KnowledgeBaseModule } from './knowledge-base/knowledge-base.module';
|
|
import { ModelConfigModule } from './model-config/model-config.module';
|
|
import { UserModule } from './user/user.module';
|
|
import { TikaModule } from './tika/tika.module';
|
|
import { VisionModule } from './vision/vision.module';
|
|
import { LibreOfficeModule } from './libreoffice/libreoffice.module';
|
|
import { Pdf2ImageModule } from './pdf2image/pdf2image.module';
|
|
import { VisionPipelineModule } from './vision-pipeline/vision-pipeline.module';
|
|
import { KnowledgeGroupModule } from './knowledge-group/knowledge-group.module';
|
|
import { SearchHistoryModule } from './search-history/search-history.module';
|
|
import { NoteModule } from './note/note.module';
|
|
import { PodcastModule } from './podcasts/podcast.module';
|
|
import { ImportTaskModule } from './import-task/import-task.module';
|
|
import { AssessmentModule } from './assessment/assessment.module';
|
|
import { I18nMiddleware } from './i18n/i18n.middleware';
|
|
import { TenantMiddleware } from './tenant/tenant.middleware';
|
|
|
|
import { TenantModule } from './tenant/tenant.module';
|
|
import { SuperAdminModule } from './super-admin/super-admin.module';
|
|
import { AdminModule } from './admin/admin.module';
|
|
import { FeishuModule } from './feishu/feishu.module';
|
|
import { PermissionModule } from './auth/permission/permission.module';
|
|
|
|
@Module({
|
|
imports: [
|
|
ConfigModule.forRoot({
|
|
isGlobal: true,
|
|
ignoreEnvFile: false,
|
|
}),
|
|
ServeStaticModule.forRoot({
|
|
rootPath: join(process.cwd(), 'uploads'),
|
|
serveRoot: '/uploads',
|
|
}),
|
|
ScheduleModule.forRoot(),
|
|
TypeOrmModule.forRootAsync({
|
|
imports: [ConfigModule],
|
|
inject: [ConfigService],
|
|
useFactory: (configService: ConfigService) => ({
|
|
type: 'better-sqlite3',
|
|
database: configService.get<string>('DATABASE_PATH'),
|
|
autoLoadEntities: true,
|
|
synchronize: true,
|
|
}),
|
|
}),
|
|
AuthModule,
|
|
I18nModule,
|
|
UserModule,
|
|
TenantModule,
|
|
ModelConfigModule,
|
|
KnowledgeBaseModule,
|
|
KnowledgeGroupModule,
|
|
SearchHistoryModule,
|
|
NoteModule,
|
|
PodcastModule,
|
|
TikaModule,
|
|
VisionModule,
|
|
LibreOfficeModule,
|
|
Pdf2ImageModule,
|
|
VisionPipelineModule,
|
|
ApiModule,
|
|
ElasticsearchModule,
|
|
UploadModule,
|
|
ChatModule,
|
|
ImportTaskModule,
|
|
AssessmentModule,
|
|
SuperAdminModule,
|
|
AdminModule,
|
|
FeishuModule,
|
|
PermissionModule,
|
|
],
|
|
controllers: [AppController],
|
|
providers: [
|
|
AppService,
|
|
{
|
|
provide: APP_GUARD,
|
|
useClass: CombinedAuthGuard,
|
|
},
|
|
],
|
|
})
|
|
export class AppModule implements NestModule {
|
|
configure(consumer: MiddlewareConsumer) {
|
|
consumer.apply(I18nMiddleware, TenantMiddleware).forRoutes('*');
|
|
}
|
|
}
|
|
// Trigger restart correct
|