forked from wangziqi/gongxue-base
feat: 集成 AI 对话与只读查询工具
This commit is contained in:
39
apps/server/src/agent-tools/agent-business-scope.factory.ts
Normal file
39
apps/server/src/agent-tools/agent-business-scope.factory.ts
Normal 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)
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user