feat: 集成 AI 对话与只读查询工具

This commit is contained in:
2026-07-23 14:24:40 +08:00
parent 302dbe0621
commit f3b59935d6
52 changed files with 4942 additions and 4 deletions

View File

@@ -0,0 +1,39 @@
import { Injectable } from '@nestjs/common';
import { CaslAbilityFactory } from '../authorization/casl-ability.factory';
import { CaslAction, SubjectName } from '../authorization/casl.constants';
import type { AgentToolContext } from './agent-tool.types';
@Injectable()
export class AgentBusinessScopeFactory {
constructor(private readonly abilityFactory: CaslAbilityFactory) {}
private ability(context: AgentToolContext) {
return this.abilityFactory.createForUser({
permissions: context.permissions,
isSuperAdmin: context.isSuperAdmin,
});
}
canManageAllClasses(context: AgentToolContext): boolean {
const ability = this.ability(context);
return context.isSuperAdmin || ability.can(CaslAction.Update, SubjectName.Class);
}
canManageAllAttendance(context: AgentToolContext): boolean {
const ability = this.ability(context);
return (
context.isSuperAdmin ||
ability.can(CaslAction.Manage, SubjectName.Attendance) ||
ability.can(CaslAction.Update, SubjectName.Class)
);
}
canManageAllDashboard(context: AgentToolContext): boolean {
const ability = this.ability(context);
return (
context.isSuperAdmin ||
ability.can(CaslAction.Manage, SubjectName.Dashboard) ||
ability.can(CaslAction.Update, SubjectName.Class)
);
}
}