Feat: admin audit (#5068)

* add admin audit (#5041)

* Test audit (#5058)

* feat: operation index

* fix: delete update vector

* perf: Clear invalid data

* perf: index

* perf: cleare invalid data

* index

* perf: audit event

* fix: schema enum

* add audit.svg (#5060)

Co-authored-by: dreamer6680 <146868355@qq.com>

* update package

* perf: audit

* perf: code move

* eslint

* doc

---------

Co-authored-by: gggaaallleee <91131304+gggaaallleee@users.noreply.github.com>
Co-authored-by: dreamer6680 <1468683855@qq.com>
Co-authored-by: dreamer6680 <146868355@qq.com>
This commit is contained in:
Archer
2025-06-19 10:35:21 +08:00
committed by GitHub
parent 36fafd2149
commit d44befeff0
53 changed files with 580 additions and 266 deletions

2
dev.md
View File

@@ -101,7 +101,7 @@ export default staticContent;
## audit
Please fill the OperationLogEventEnum and operationLog/audit function is added to the ts, and on the corresponding position to fill i18n, at the same time to add the location of the log using addOpearationLog function add function
Please fill the AuditEventEnum and audit function is added to the ts, and on the corresponding position to fill i18n, at the same time to add the location of the log using addOpearationLog function add function
## Build

View File

@@ -11,6 +11,7 @@ weight: 787
## 🚀 新增内容
1. 知识库导入,支持配置:自动将文件名加入系统索引中。
2. Admin 端审计日志。
## ⚙️ 优化

View File

@@ -78,7 +78,7 @@ export type YuqueServer = {
![](/imgs/thirddataset-5.png)
`FastGPT\packages\service\support\operationLog\util.ts`文件下添加如下内容,以支持获取 I18n 翻译。
`FastGPT\packages\service\support\user/audit\util.ts`文件下添加如下内容,以支持获取 I18n 翻译。
![](/imgs/thirddataset-6.png)

View File

@@ -1,4 +1,30 @@
export enum OperationLogEventEnum {
import type { auditLogMap, adminAuditLogMap } from '../../../../web/support/user/audit/constants';
export enum AdminAuditEventEnum {
ADMIN_LOGIN = 'ADMIN_LOGIN',
ADMIN_UPDATE_SYSTEM_MODAL = 'ADMIN_UPDATE_SYSTEM_MODAL',
ADMIN_SEND_SYSTEM_INFORM = 'ADMIN_SEND_SYSTEM_INFORM',
ADMIN_ADD_USER = 'ADMIN_ADD_USER',
ADMIN_UPDATE_USER = 'ADMIN_UPDATE_USER',
ADMIN_UPDATE_TEAM = 'ADMIN_UPDATE_TEAM',
ADMIN_ADD_PLAN = 'ADMIN_ADD_PLAN',
ADMIN_UPDATE_PLAN = 'ADMIN_UPDATE_PLAN',
ADMIN_FINISH_INVOICE = 'ADMIN_FINISH_INVOICE',
ADMIN_UPDATE_SYSTEM_CONFIG = 'ADMIN_UPDATE_SYSTEM_CONFIG',
ADMIN_CREATE_APP_TEMPLATE = 'ADMIN_CREATE_APP_TEMPLATE',
ADMIN_UPDATE_APP_TEMPLATE = 'ADMIN_UPDATE_APP_TEMPLATE',
ADMIN_DELETE_APP_TEMPLATE = 'ADMIN_DELETE_APP_TEMPLATE',
ADMIN_SAVE_TEMPLATE_TYPE = 'ADMIN_SAVE_TEMPLATE_TYPE',
ADMIN_DELETE_TEMPLATE_TYPE = 'ADMIN_DELETE_TEMPLATE_TYPE',
ADMIN_CREATE_PLUGIN = 'ADMIN_CREATE_PLUGIN',
ADMIN_UPDATE_PLUGIN = 'ADMIN_UPDATE_PLUGIN',
ADMIN_DELETE_PLUGIN = 'ADMIN_DELETE_PLUGIN',
ADMIN_CREATE_PLUGIN_GROUP = 'ADMIN_CREATE_PLUGIN_GROUP',
ADMIN_UPDATE_PLUGIN_GROUP = 'ADMIN_UPDATE_PLUGIN_GROUP',
ADMIN_DELETE_PLUGIN_GROUP = 'ADMIN_DELETE_PLUGIN_GROUP'
}
export enum AuditEventEnum {
//Team
LOGIN = 'LOGIN',
CREATE_INVITATION_LINK = 'CREATE_INVITATION_LINK',
@@ -61,3 +87,10 @@ export enum OperationLogEventEnum {
UPDATE_API_KEY = 'UPDATE_API_KEY',
DELETE_API_KEY = 'DELETE_API_KEY'
}
export type AuditEventParamsType = {
[K in AuditEventEnum]: (typeof auditLogMap)[K]['params'];
};
export type AdminAuditEventParamsType = {
[K in AdminAuditEventEnum]: (typeof adminAuditLogMap)[K]['params'];
};

View File

@@ -1,19 +1,19 @@
import type { SourceMemberType } from '../user/type';
import type { OperationLogEventEnum } from './constants';
import type { AuditEventEnum } from './constants';
export type OperationLogSchema = {
_id: string;
tmbId: string;
teamId: string;
timestamp: Date;
event: `${OperationLogEventEnum}`;
event: `${AuditEventEnum}`;
metadata?: Record<string, string>;
};
export type OperationListItemType = {
_id: string;
sourceMember: SourceMemberType;
event: `${OperationLogEventEnum}`;
event: `${AuditEventEnum}`;
timestamp: Date;
metadata: Record<string, string>;
};

View File

@@ -1,25 +0,0 @@
import { MongoOperationLog } from './schema';
import type { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { type TemplateParamsMap } from './constants';
import { retryFn } from '../../../global/common/system/utils';
export function addOperationLog<T extends OperationLogEventEnum>({
teamId,
tmbId,
event,
params
}: {
tmbId: string;
teamId: string;
event: T;
params?: TemplateParamsMap[T];
}) {
retryFn(() =>
MongoOperationLog.create({
tmbId: tmbId,
teamId: teamId,
event,
metadata: params
})
);
}

View File

@@ -1,6 +1,6 @@
import { Schema, getMongoLogModel } from '../../common/mongo';
import { type OperationLogSchema } from '@fastgpt/global/support/operationLog/type';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { Schema, getMongoLogModel } from '../../../common/mongo';
import { type OperationLogSchema } from '@fastgpt/global/support/user/audit/type';
import { AdminAuditEventEnum, AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import {
TeamCollectionName,
TeamMemberCollectionName
@@ -25,7 +25,7 @@ const OperationLogSchema = new Schema({
},
event: {
type: String,
enum: Object.values(OperationLogEventEnum),
enum: [...Object.values(AuditEventEnum), ...Object.values(AdminAuditEventEnum)],
required: true
},
metadata: {

View File

@@ -1,6 +1,14 @@
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
import { i18nT } from '../../../web/i18n/utils';
import { i18nT } from '../../../../web/i18n/utils';
import { MongoOperationLog } from './schema';
import type {
AdminAuditEventEnum,
AuditEventEnum,
AdminAuditEventParamsType,
AuditEventParamsType
} from '@fastgpt/global/support/user/audit/constants';
import { retryFn } from '@fastgpt/global/common/system/utils';
export function getI18nAppType(type: AppTypeEnum): string {
if (type === AppTypeEnum.folder) return i18nT('account_team:type.Folder');
@@ -34,3 +42,54 @@ export function getI18nDatasetType(type: DatasetTypeEnum | string): string {
if (type === DatasetTypeEnum.yuque) return i18nT('account_team:dataset.yuque_dataset');
return i18nT('common:UnKnow');
}
export function getI18nInformLevel(level: string): string {
if (level === 'common') return i18nT('account_team:inform_level_common');
if (level === 'important') return i18nT('account_team:inform_level_important');
if (level === 'emergency') return i18nT('account_team:inform_level_emergency');
return i18nT('common:UnKnow');
}
export function addAuditLog<T extends AuditEventEnum>({
teamId,
tmbId,
event,
params
}: {
tmbId: string;
teamId: string;
event: T;
params?: AuditEventParamsType[T];
}): void;
export function addAuditLog<T extends AdminAuditEventEnum>({
teamId,
tmbId,
event,
params
}: {
tmbId: string;
teamId: string;
event: T;
params?: AdminAuditEventParamsType[T];
}): void;
export function addAuditLog<T extends AuditEventEnum | AdminAuditEventEnum>({
teamId,
tmbId,
event,
params
}: {
tmbId: string;
teamId: string;
event: T;
params?: any;
}) {
retryFn(() =>
MongoOperationLog.create({
tmbId: tmbId,
teamId: teamId,
event,
metadata: params
})
);
}

View File

@@ -20,6 +20,7 @@ export const iconPaths = {
'common/addLight': () => import('./icons/common/addLight.svg'),
'common/addUser': () => import('./icons/common/addUser.svg'),
'common/administrator': () => import('./icons/common/administrator.svg'),
'common/audit': () => import('./icons/common/audit.svg'),
'common/alipay': () => import('./icons/common/alipay.svg'),
'common/app': () => import('./icons/common/app.svg'),
'common/arrowLeft': () => import('./icons/common/arrowLeft.svg'),

View File

@@ -0,0 +1 @@
<svg t="1750218314310" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4361" ><path d="M746.88 938.88v42.24a42.88 42.88 0 0 0 42.24-42.24zM149.12 149.12A21.76 21.76 0 0 1 170.88 128V42.88A106.24 106.24 0 0 0 64 149.12zM170.88 128h512V42.88h-512V128z m512 0a21.12 21.12 0 0 1 21.12 21.12h85.12A106.24 106.24 0 0 0 682.88 42.88V128z m21.12 21.12v789.76h85.12V149.12zM746.88 896h-576v85.12h576V896z m-576 0a21.76 21.76 0 0 1-21.76-21.12H64a106.24 106.24 0 0 0 106.88 106.24V896z m-21.76-21.12V149.12H64v725.76z" p-id="4362"></path><path d="M746.88 938.88H704a42.88 42.88 0 0 0 42.88 42.24v-42.24zM789.12 512V426.88A85.12 85.12 0 0 0 704 512z m0 0h85.76V426.88h-85.76V512z m85.76 0H960a85.12 85.12 0 0 0-85.12-85.12V512z m0 0v362.88H960V512z m0 362.88a21.76 21.76 0 0 1-21.76 21.12v85.12A106.24 106.24 0 0 0 960 874.88z m-21.76 21.12h-106.24v85.12h106.24V896z m-64 42.88V512H704v426.88zM234.88 213.12a42.88 42.88 0 0 0 0 85.76V213.12z m170.24 85.76a42.88 42.88 0 0 0 0-85.76v85.76z m-170.24 0h170.24V213.12H234.88v85.76zM234.88 362.88a42.24 42.24 0 0 0-42.88 42.24 42.88 42.88 0 0 0 42.88 42.88V362.88z m256 85.12a42.88 42.88 0 0 0 42.24-42.88 42.24 42.24 0 0 0-42.24-42.24V448z m-256 0h256V362.88h-256V448z" p-id="4363"></path></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -5,6 +5,28 @@
"7days": "7 Days",
"accept": "accept",
"action": "operate",
"admin_add_plan": "Add a team package",
"admin_add_user": "Add a user",
"admin_change_license": "Change of license",
"admin_create_app_template": "Add a template",
"admin_create_plugin": "Add plugins",
"admin_create_plugin_group": "Create plugin grouping",
"admin_delete_app_template": "Delete the template",
"admin_delete_plugin": "Plugin Delete",
"admin_delete_plugin_group": "Delete plugin grouping",
"admin_delete_template_type": "Delete template classification",
"admin_finish_invoice": "Issuing an invoice",
"admin_login": "Administrator login",
"admin_save_template_type": "Update template classification",
"admin_send_system_inform": "Send system notifications",
"admin_update_app_template": "Update templates",
"admin_update_plan": "Editorial Team Package",
"admin_update_plugin": "Plugin Update",
"admin_update_plugin_group": "Plugin group update",
"admin_update_system_config": "System configuration update",
"admin_update_system_modal": "System announcement configuration",
"admin_update_team": "Edit team information",
"admin_update_user": "Edit User",
"assign_permission": "Permission change",
"audit_log": "audit",
"change_department_name": "Department Editor",
@@ -73,6 +95,9 @@
"has_forbidden": "Forbidden",
"has_invited": "Invited",
"ignore": "Ignore",
"inform_level_common": "Normal",
"inform_level_emergency": "Emergency",
"inform_level_important": "Important",
"invitation_copy_link": "[{{systemName}}] {{userName}} invites you to join the {{teamName}} team, link: {{url}}",
"invitation_link_auto_clean_hint": "Expired links will be automatically cleaned up after 30 days",
"invitation_link_description": "Link description",
@@ -85,6 +110,28 @@
"label_sync": "Tag sync",
"leave": "Resigned",
"leave_team_failed": "Leaving the team exception",
"log_admin_add_plan": "【{{name}}】A package will be added to a team with a team id [{{teamId}}]",
"log_admin_add_user": "【{{name}}】Create a user named [{{userName}}]",
"log_admin_change_license": "【{{name}}】Changed License",
"log_admin_create_app_template": "【{{name}}】Added a template named [{{templateName}}]",
"log_admin_create_plugin": "【{{name}}】Added plugin named [{{pluginName}}]",
"log_admin_create_plugin_group": "【{{name}}】Create a plug-in group called [{{groupName}}]",
"log_admin_delete_app_template": "【{{name}}】Deleted the template named [{{templateName}}]",
"log_admin_delete_plugin": "【{{name}}】Remove plugin named [{{pluginName}}]",
"log_admin_delete_plugin_group": "【{{name}}】Deleted plug-in grouping named [{{groupName}}]",
"log_admin_delete_template_type": "【{{name}}】Deleted the template classification named [{{typeName}}]",
"log_admin_finish_invoice": "【{{name}}】Issued an invoice to a team named [{{teamName}}]",
"log_admin_login": "【{{name}}】Logined in the administrator background",
"log_admin_save_template_type": "【{{name}}】Added template classification called [{{typeName}}]",
"log_admin_send_system_inform": "【{{name}}】Sent a system notification titled [{{informTitle}}], with the level of [{{level}}]",
"log_admin_update_app_template": "【{{name}}】Updated template information named [{{templateName}}]",
"log_admin_update_plan": "【{{name}}】Edited the package information of the team with the team id [{{teamId}}]",
"log_admin_update_plugin": "【{{name}}】Updated plugin information called [{{pluginName}}]",
"log_admin_update_plugin_group": "【{{name}}】Updated plug-in grouping called [{{groupName}}]",
"log_admin_update_system_config": "【{{name}}】Updated system configuration",
"log_admin_update_system_modal": "【{{name}}】The system announcement configuration was carried out",
"log_admin_update_team": "[{{name}}] Replace the team editing information named [{{teamName}}] to the team name: [{{newTeamName}}], balance: [{{newBalance}}]",
"log_admin_update_user": "Modify the user information of 【{{userName}}】",
"log_assign_permission": "[{{name}}] Updated the permissions of [{{objectName}}]: [Application creation: [{{appCreate}}], Knowledge Base: [{{datasetCreate}}], API Key: [{{apiKeyCreate}}], Management: [{{manage}}]]",
"log_change_department": "【{{name}}】Updated department【{{departmentName}}】",
"log_change_member_name": "【{{name}}】Rename member [{{memberName}}] to 【{{newName}}】",

View File

@@ -5,6 +5,28 @@
"7days": "7天",
"accept": "接受",
"action": "操作",
"admin_add_plan": "添加团队套餐",
"admin_add_user": "添加用户",
"admin_change_license": "变更许可证",
"admin_create_app_template": "添加模板",
"admin_create_plugin": "添加插件",
"admin_create_plugin_group": "创建插件分组",
"admin_delete_app_template": "删除模板",
"admin_delete_plugin": "插件删除",
"admin_delete_plugin_group": "删除插件分组",
"admin_delete_template_type": "删除模板分类",
"admin_finish_invoice": "开具发票",
"admin_login": "管理员登录",
"admin_save_template_type": "更新模板分类",
"admin_send_system_inform": "发送系统通知",
"admin_update_app_template": "更新模板",
"admin_update_plan": "编辑团队套餐",
"admin_update_plugin": "插件更新",
"admin_update_plugin_group": "插件分组更新",
"admin_update_system_config": "系统配置更新",
"admin_update_system_modal": "系统公告配置",
"admin_update_team": "编辑团队信息",
"admin_update_user": "编辑用户信息",
"assign_permission": "权限变更",
"audit_log": "审计",
"change_department_name": "部门编辑",
@@ -74,6 +96,9 @@
"has_forbidden": "已失效",
"has_invited": "已邀请",
"ignore": "忽略",
"inform_level_common": "一般",
"inform_level_emergency": "紧急",
"inform_level_important": "重要",
"invitation_copy_link": "【{{systemName}}】 {{userName}} 邀请您加入{{teamName}}团队,链接:{{url}}",
"invitation_link_auto_clean_hint": "已失效链接将在30天后自动清理",
"invitation_link_description": "链接描述",
@@ -86,6 +111,28 @@
"label_sync": "标签同步",
"leave": "已离职",
"leave_team_failed": "离开团队异常",
"log_admin_add_plan": "【{{name}}】将给团队id为【{{teamId}}】的团队添加了套餐",
"log_admin_add_user": "【{{name}}】创建了一个名为【{{userName}}】的用户",
"log_admin_change_license": "【{{name}}】变更了License",
"log_admin_create_app_template": "【{{name}}】添加了名为【{{templateName}}】的模板",
"log_admin_create_plugin": "【{{name}}】添加了名为【{{pluginName}}】的插件",
"log_admin_create_plugin_group": "【{{name}}】创建了名为【{{groupName}}】的插件分组",
"log_admin_delete_app_template": "【{{name}}】删除了名为【{{templateName}}】的模板",
"log_admin_delete_plugin": "【{{name}}】删除了名为【{{pluginName}}】的插件",
"log_admin_delete_plugin_group": "【{{name}}】删除了名为【{{groupName}}】的插件分组",
"log_admin_delete_template_type": "【{{name}}】删除了名为【{{typeName}}】的模板分类",
"log_admin_finish_invoice": "【{{name}}】给名为【{{teamName}}】的团队开具了发票",
"log_admin_login": "【{{name}}】登录了管理员后台",
"log_admin_save_template_type": "【{{name}}】添加了名为【{{typeName}}】的模板分类",
"log_admin_send_system_inform": "【{{name}}】发送了标题为【{{informTitle}}】的系统通知,等级为【{{level}}】",
"log_admin_update_app_template": "【{{name}}】更新了名为【{{templateName}}】的模板信息",
"log_admin_update_plan": "【{{name}}】编辑了团队id为【{{teamId}}】的团队的套餐信息",
"log_admin_update_plugin": "【{{name}}】更新了名为【{{pluginName}}】的插件信息",
"log_admin_update_plugin_group": "【{{name}}】更新了名为【{{groupName}}】的插件分组",
"log_admin_update_system_config": "【{{name}}】更新了系统配置",
"log_admin_update_system_modal": "【{{name}}】进行了系统公告配置",
"log_admin_update_team": "【{{name}}】将名为【{{teamName}}】的团队编辑信息为团队名:【{{newTeamName}}】,余额:【{{newBalance}}】",
"log_admin_update_user": "修改【{{userName}}】的用户信息",
"log_assign_permission": "【{{name}}】更新了【{{objectName}}】的权限:[应用创建:【{{appCreate}}】, 知识库:【{{datasetCreate}}】, API密钥:【{{apiKeyCreate}}】, 管理:【{{manage}}】]",
"log_change_department": "【{{name}}】更新了部门【{{departmentName}}】",
"log_change_member_name": "【{{name}}】将成员【{{memberName}}】重命名为【{{newName}}】",

View File

@@ -5,6 +5,27 @@
"7days": "7 天",
"accept": "接受",
"action": "操作",
"admin_add_plan": "添加團隊套餐",
"admin_add_user": "添加用戶",
"admin_change_license": "變更許可證",
"admin_create_app_template": "添加模板",
"admin_create_plugin": "添加插件",
"admin_create_plugin_group": "創建插件分組",
"admin_delete_app_template": "刪除模板",
"admin_delete_plugin": "插件刪除",
"admin_delete_plugin_group": "刪除插件分組",
"admin_delete_template_type": "刪除模板分類",
"admin_finish_invoice": "開具發票",
"admin_login": "管理員登錄",
"admin_send_system_inform": "發送系統通知",
"admin_update_app_template": "更新模板",
"admin_update_plan": "編輯團隊套餐",
"admin_update_plugin": "插件更新",
"admin_update_plugin_group": "插件分組更新",
"admin_update_system_config": "系統配置更新",
"admin_update_system_modal": "系統公告配置",
"admin_update_team": "編輯團隊信息",
"admin_update_user": "編輯用戶信息",
"assign_permission": "權限變更",
"audit_log": "審計",
"change_department_name": "部門編輯",
@@ -73,6 +94,9 @@
"has_forbidden": "已失效",
"has_invited": "已邀請",
"ignore": "忽略",
"inform_level_common": "一般",
"inform_level_emergency": "緊急",
"inform_level_important": "重要",
"invitation_copy_link": "【{{systemName}}】 {{userName}} 邀請您加入{{teamName}}團隊,連結:{{url}}",
"invitation_link_auto_clean_hint": "已失效連結將在 30 天後自動清理",
"invitation_link_description": "連結描述",
@@ -85,6 +109,28 @@
"label_sync": "標籤同步",
"leave": "已離職",
"leave_team_failed": "離開團隊異常",
"log_admin_add_plan": "【{{name}}】將給團隊id為【{{teamId}}】的團隊添加了套餐",
"log_admin_add_user": "【{{name}}】創建了一個名為【{{userName}}】的用戶",
"log_admin_change_license": "【{{name}}】變更了License",
"log_admin_create_app_template": "【{{name}}】添加了名為【{{templateName}}】的模板",
"log_admin_create_plugin": "【{{name}}】添加了名為【{{pluginName}}】的插件",
"log_admin_create_plugin_group": "【{{name}}】創建了名為【{{groupName}}】的插件分組",
"log_admin_delete_app_template": "【{{name}}】刪除了名為【{{templateName}}】的模板",
"log_admin_delete_plugin": "【{{name}}】刪除了名為【{{pluginName}}】的插件",
"log_admin_delete_plugin_group": "【{{name}}】刪除了名為【{{groupName}}】的插件分組",
"log_admin_delete_template_type": "【{{name}}】刪除了名為【{{typeName}}】的模板分類",
"log_admin_finish_invoice": "【{{name}}】給名為【{{teamName}}】的團隊開具了發票",
"log_admin_login": "【{{name}}】登錄了管理員後台",
"log_admin_save_template_type": "【{{name}}】添加了名為【{{typeName}}】的模板分類",
"log_admin_send_system_inform": "【{{name}}】發送了標題為【{{informTitle}}】的系統通知,等級為【{{level}}】",
"log_admin_update_app_template": "【{{name}}】更新了名為【{{templateName}}】的模板信息",
"log_admin_update_plan": "【{{name}}】編輯了團隊id為【{{teamId}}】的團隊的套餐信息",
"log_admin_update_plugin": "【{{name}}】更新了名為【{{pluginName}}】的插件信息",
"log_admin_update_plugin_group": "【{{name}}】更新了名為【{{groupName}}】的插件分組",
"log_admin_update_system_config": "【{{name}}】更新了系統配置",
"log_admin_update_system_modal": "【{{name}}】進行了系統公告配置",
"log_admin_update_team": "【{{name}}】將名為【{{teamName}}】的團隊編輯信息為團隊名:【{{newTeamName}}】,餘額:【{{newBalance}}】",
"log_admin_update_user": "修改【{{userName}}】的用戶信息",
"log_assign_permission": "【{{name}}】更新了【{{objectName}}】的權限:[應用創建:【{{appCreate}}】, 知識庫:【{{datasetCreate}}】, API密鑰:【{{apiKeyCreate}}】, 管理:【{{manage}}】]",
"log_change_department": "【{{name}}】更新了部門【{{departmentName}}】",
"log_change_member_name": "【{{name}}】將成員【{{memberName}}】重命名為【{{newName}}】",

View File

@@ -1,80 +1,190 @@
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { i18nT } from '../../../web/i18n/utils';
import { AuditEventEnum, AdminAuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { i18nT } from '../../../i18n/utils';
export const operationLogMap = {
export const adminAuditLogMap = {
[AdminAuditEventEnum.ADMIN_LOGIN]: {
content: i18nT('account_team:log_admin_login'),
typeLabel: i18nT('account_team:admin_login'),
params: {} as { name?: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_SYSTEM_MODAL]: {
content: i18nT('account_team:log_admin_update_system_modal'),
typeLabel: i18nT('account_team:admin_update_system_modal'),
params: {} as { name?: string }
},
[AdminAuditEventEnum.ADMIN_SEND_SYSTEM_INFORM]: {
content: i18nT('account_team:log_admin_send_system_inform'),
typeLabel: i18nT('account_team:admin_send_system_inform'),
params: {} as { name?: string; informTitle?: string; level?: string }
},
[AdminAuditEventEnum.ADMIN_ADD_USER]: {
content: i18nT('account_team:log_admin_add_user'),
typeLabel: i18nT('account_team:admin_add_user'),
params: {} as { name?: string; userName: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_USER]: {
content: i18nT('account_team:log_admin_update_user'),
typeLabel: i18nT('account_team:admin_update_user'),
params: {} as {
userName?: string;
}
},
[AdminAuditEventEnum.ADMIN_UPDATE_TEAM]: {
content: i18nT('account_team:log_admin_update_team'),
typeLabel: i18nT('account_team:admin_update_team'),
params: {} as { name?: string; teamName: string; newTeamName: string; newBalance: string }
},
[AdminAuditEventEnum.ADMIN_ADD_PLAN]: {
content: i18nT('account_team:log_admin_add_plan'),
typeLabel: i18nT('account_team:admin_add_plan'),
params: {} as { name?: string; teamId: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_PLAN]: {
content: i18nT('account_team:log_admin_update_plan'),
typeLabel: i18nT('account_team:admin_update_plan'),
params: {} as { name?: string; teamId: string }
},
[AdminAuditEventEnum.ADMIN_FINISH_INVOICE]: {
content: i18nT('account_team:log_admin_finish_invoice'),
typeLabel: i18nT('account_team:admin_finish_invoice'),
params: {} as { name?: string; teamName: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_SYSTEM_CONFIG]: {
content: i18nT('account_team:log_admin_update_system_config'),
typeLabel: i18nT('account_team:admin_update_system_config'),
params: {} as { name?: string }
},
[AdminAuditEventEnum.ADMIN_CREATE_APP_TEMPLATE]: {
content: i18nT('account_team:log_admin_create_app_template'),
typeLabel: i18nT('account_team:admin_create_app_template'),
params: {} as { name?: string; templateName: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_APP_TEMPLATE]: {
content: i18nT('account_team:log_admin_update_app_template'),
typeLabel: i18nT('account_team:admin_update_app_template'),
params: {} as { name?: string; templateName: string }
},
[AdminAuditEventEnum.ADMIN_DELETE_APP_TEMPLATE]: {
content: i18nT('account_team:log_admin_delete_app_template'),
typeLabel: i18nT('account_team:admin_delete_app_template'),
params: {} as { name?: string; templateName: string }
},
[AdminAuditEventEnum.ADMIN_SAVE_TEMPLATE_TYPE]: {
content: i18nT('account_team:log_admin_save_template_type'),
typeLabel: i18nT('account_team:admin_save_template_type'),
params: {} as { name?: string; typeName: string }
},
[AdminAuditEventEnum.ADMIN_DELETE_TEMPLATE_TYPE]: {
content: i18nT('account_team:log_admin_delete_template_type'),
typeLabel: i18nT('account_team:admin_delete_template_type'),
params: {} as { name?: string; typeName: string }
},
[AdminAuditEventEnum.ADMIN_CREATE_PLUGIN]: {
content: i18nT('account_team:log_admin_create_plugin'),
typeLabel: i18nT('account_team:admin_create_plugin'),
params: {} as { name?: string; pluginName: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_PLUGIN]: {
content: i18nT('account_team:log_admin_update_plugin'),
typeLabel: i18nT('account_team:admin_update_plugin'),
params: {} as { name?: string; pluginName: string }
},
[AdminAuditEventEnum.ADMIN_DELETE_PLUGIN]: {
content: i18nT('account_team:log_admin_delete_plugin'),
typeLabel: i18nT('account_team:admin_delete_plugin'),
params: {} as { name?: string; pluginName: string }
},
[AdminAuditEventEnum.ADMIN_CREATE_PLUGIN_GROUP]: {
content: i18nT('account_team:log_admin_create_plugin_group'),
typeLabel: i18nT('account_team:admin_create_plugin_group'),
params: {} as { name?: string; groupName: string }
},
[AdminAuditEventEnum.ADMIN_UPDATE_PLUGIN_GROUP]: {
content: i18nT('account_team:log_admin_update_plugin_group'),
typeLabel: i18nT('account_team:admin_update_plugin_group'),
params: {} as { name?: string; groupName: string }
},
[AdminAuditEventEnum.ADMIN_DELETE_PLUGIN_GROUP]: {
content: i18nT('account_team:log_admin_delete_plugin_group'),
typeLabel: i18nT('account_team:admin_delete_plugin_group'),
params: {} as { name?: string; groupName: string }
}
};
export const auditLogMap = {
//Team
[OperationLogEventEnum.LOGIN]: {
[AuditEventEnum.LOGIN]: {
content: i18nT('account_team:log_login'),
typeLabel: i18nT('account_team:login'),
params: {} as { name?: string }
},
[OperationLogEventEnum.CREATE_INVITATION_LINK]: {
[AuditEventEnum.CREATE_INVITATION_LINK]: {
content: i18nT('account_team:log_create_invitation_link'),
typeLabel: i18nT('account_team:create_invitation_link'),
params: {} as { name?: string; link: string }
},
[OperationLogEventEnum.JOIN_TEAM]: {
[AuditEventEnum.JOIN_TEAM]: {
content: i18nT('account_team:log_join_team'),
typeLabel: i18nT('account_team:join_team'),
params: {} as { name?: string; link: string }
},
[OperationLogEventEnum.CHANGE_MEMBER_NAME]: {
[AuditEventEnum.CHANGE_MEMBER_NAME]: {
content: i18nT('account_team:log_change_member_name'),
typeLabel: i18nT('account_team:change_member_name'),
params: {} as { name?: string; memberName: string; newName: string }
},
[OperationLogEventEnum.KICK_OUT_TEAM]: {
[AuditEventEnum.KICK_OUT_TEAM]: {
content: i18nT('account_team:log_kick_out_team'),
typeLabel: i18nT('account_team:kick_out_team'),
params: {} as { name?: string; memberName: string }
},
[OperationLogEventEnum.RECOVER_TEAM_MEMBER]: {
[AuditEventEnum.RECOVER_TEAM_MEMBER]: {
content: i18nT('account_team:log_recover_team_member'),
typeLabel: i18nT('account_team:recover_team_member'),
params: {} as { name?: string; memberName: string }
},
[OperationLogEventEnum.CREATE_DEPARTMENT]: {
[AuditEventEnum.CREATE_DEPARTMENT]: {
content: i18nT('account_team:log_create_department'),
typeLabel: i18nT('account_team:create_department'),
params: {} as { name?: string; departmentName: string }
},
[OperationLogEventEnum.CHANGE_DEPARTMENT]: {
[AuditEventEnum.CHANGE_DEPARTMENT]: {
content: i18nT('account_team:log_change_department'),
typeLabel: i18nT('account_team:change_department_name'),
params: {} as { name?: string; departmentName: string }
},
[OperationLogEventEnum.DELETE_DEPARTMENT]: {
[AuditEventEnum.DELETE_DEPARTMENT]: {
content: i18nT('account_team:log_delete_department'),
typeLabel: i18nT('account_team:delete_department'),
params: {} as { name?: string; departmentName: string }
},
[OperationLogEventEnum.RELOCATE_DEPARTMENT]: {
[AuditEventEnum.RELOCATE_DEPARTMENT]: {
content: i18nT('account_team:log_relocate_department'),
typeLabel: i18nT('account_team:relocate_department'),
params: {} as { name?: string; departmentName: string }
},
[OperationLogEventEnum.CREATE_GROUP]: {
[AuditEventEnum.CREATE_GROUP]: {
content: i18nT('account_team:log_create_group'),
typeLabel: i18nT('account_team:create_group'),
params: {} as { name?: string; groupName: string }
},
[OperationLogEventEnum.DELETE_GROUP]: {
[AuditEventEnum.DELETE_GROUP]: {
content: i18nT('account_team:log_delete_group'),
typeLabel: i18nT('account_team:delete_group'),
params: {} as { name?: string; groupName: string }
},
[OperationLogEventEnum.ASSIGN_PERMISSION]: {
[AuditEventEnum.ASSIGN_PERMISSION]: {
content: i18nT('account_team:log_assign_permission'),
typeLabel: i18nT('account_team:assign_permission'),
params: {} as { name?: string; objectName: string; permission: string }
},
//APP
[OperationLogEventEnum.CREATE_APP]: {
[AuditEventEnum.CREATE_APP]: {
content: i18nT('account_team:log_create_app'),
typeLabel: i18nT('account_team:create_app'),
params: {} as { name?: string; appName: string; appType: string }
},
[OperationLogEventEnum.UPDATE_APP_INFO]: {
[AuditEventEnum.UPDATE_APP_INFO]: {
content: i18nT('account_team:log_update_app_info'),
typeLabel: i18nT('account_team:update_app_info'),
params: {} as {
@@ -85,17 +195,17 @@ export const operationLogMap = {
appType: string;
}
},
[OperationLogEventEnum.MOVE_APP]: {
[AuditEventEnum.MOVE_APP]: {
content: i18nT('account_team:log_move_app'),
typeLabel: i18nT('account_team:move_app'),
params: {} as { name?: string; appName: string; targetFolderName: string; appType: string }
},
[OperationLogEventEnum.DELETE_APP]: {
[AuditEventEnum.DELETE_APP]: {
content: i18nT('account_team:log_delete_app'),
typeLabel: i18nT('account_team:delete_app'),
params: {} as { name?: string; appName: string; appType: string }
},
[OperationLogEventEnum.UPDATE_APP_COLLABORATOR]: {
[AuditEventEnum.UPDATE_APP_COLLABORATOR]: {
content: i18nT('account_team:log_update_app_collaborator'),
typeLabel: i18nT('account_team:update_app_collaborator'),
params: {} as {
@@ -108,7 +218,7 @@ export const operationLogMap = {
permission: string;
}
},
[OperationLogEventEnum.DELETE_APP_COLLABORATOR]: {
[AuditEventEnum.DELETE_APP_COLLABORATOR]: {
content: i18nT('account_team:log_delete_app_collaborator'),
typeLabel: i18nT('account_team:delete_app_collaborator'),
params: {} as {
@@ -119,7 +229,7 @@ export const operationLogMap = {
itemValueName: string;
}
},
[OperationLogEventEnum.TRANSFER_APP_OWNERSHIP]: {
[AuditEventEnum.TRANSFER_APP_OWNERSHIP]: {
content: i18nT('account_team:log_transfer_app_ownership'),
typeLabel: i18nT('account_team:transfer_app_ownership'),
params: {} as {
@@ -130,17 +240,17 @@ export const operationLogMap = {
newOwnerName: string;
}
},
[OperationLogEventEnum.CREATE_APP_COPY]: {
[AuditEventEnum.CREATE_APP_COPY]: {
content: i18nT('account_team:log_create_app_copy'),
typeLabel: i18nT('account_team:create_app_copy'),
params: {} as { name?: string; appName: string; appType: string }
},
[OperationLogEventEnum.CREATE_APP_FOLDER]: {
[AuditEventEnum.CREATE_APP_FOLDER]: {
content: i18nT('account_team:log_create_app_folder'),
typeLabel: i18nT('account_team:create_app_folder'),
params: {} as { name?: string; folderName: string }
},
[OperationLogEventEnum.UPDATE_PUBLISH_APP]: {
[AuditEventEnum.UPDATE_PUBLISH_APP]: {
content: i18nT('account_team:log_update_publish_app'),
typeLabel: i18nT('account_team:update_publish_app'),
params: {} as {
@@ -151,43 +261,43 @@ export const operationLogMap = {
appType: string;
}
},
[OperationLogEventEnum.CREATE_APP_PUBLISH_CHANNEL]: {
[AuditEventEnum.CREATE_APP_PUBLISH_CHANNEL]: {
content: i18nT('account_team:log_create_app_publish_channel'),
typeLabel: i18nT('account_team:create_app_publish_channel'),
params: {} as { name?: string; appName: string; channelName: string; appType: string }
},
[OperationLogEventEnum.UPDATE_APP_PUBLISH_CHANNEL]: {
[AuditEventEnum.UPDATE_APP_PUBLISH_CHANNEL]: {
content: i18nT('account_team:log_update_app_publish_channel'),
typeLabel: i18nT('account_team:update_app_publish_channel'),
params: {} as { name?: string; appName: string; channelName: string; appType: string }
},
[OperationLogEventEnum.DELETE_APP_PUBLISH_CHANNEL]: {
[AuditEventEnum.DELETE_APP_PUBLISH_CHANNEL]: {
content: i18nT('account_team:log_delete_app_publish_channel'),
typeLabel: i18nT('account_team:delete_app_publish_channel'),
params: {} as { name?: string; appName: string; channelName: string; appType: string }
},
[OperationLogEventEnum.EXPORT_APP_CHAT_LOG]: {
[AuditEventEnum.EXPORT_APP_CHAT_LOG]: {
content: i18nT('account_team:log_export_app_chat_log'),
typeLabel: i18nT('account_team:export_app_chat_log'),
params: {} as { name?: string; appName: string; appType: string }
},
//Dataset
[OperationLogEventEnum.CREATE_DATASET]: {
[AuditEventEnum.CREATE_DATASET]: {
content: i18nT('account_team:log_create_dataset'),
typeLabel: i18nT('account_team:create_dataset'),
params: {} as { name?: string; datasetName: string; datasetType: string }
},
[OperationLogEventEnum.UPDATE_DATASET]: {
[AuditEventEnum.UPDATE_DATASET]: {
content: i18nT('account_team:log_update_dataset'),
typeLabel: i18nT('account_team:update_dataset'),
params: {} as { name?: string; datasetName: string; datasetType: string }
},
[OperationLogEventEnum.DELETE_DATASET]: {
[AuditEventEnum.DELETE_DATASET]: {
content: i18nT('account_team:log_delete_dataset'),
typeLabel: i18nT('account_team:delete_dataset'),
params: {} as { name?: string; datasetName: string; datasetType: string }
},
[OperationLogEventEnum.MOVE_DATASET]: {
[AuditEventEnum.MOVE_DATASET]: {
content: i18nT('account_team:log_move_dataset'),
typeLabel: i18nT('account_team:move_dataset'),
params: {} as {
@@ -197,7 +307,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.UPDATE_DATASET_COLLABORATOR]: {
[AuditEventEnum.UPDATE_DATASET_COLLABORATOR]: {
content: i18nT('account_team:log_update_dataset_collaborator'),
typeLabel: i18nT('account_team:update_dataset_collaborator'),
params: {} as {
@@ -210,7 +320,7 @@ export const operationLogMap = {
permission: string;
}
},
[OperationLogEventEnum.DELETE_DATASET_COLLABORATOR]: {
[AuditEventEnum.DELETE_DATASET_COLLABORATOR]: {
content: i18nT('account_team:log_delete_dataset_collaborator'),
typeLabel: i18nT('account_team:delete_dataset_collaborator'),
params: {} as {
@@ -221,7 +331,7 @@ export const operationLogMap = {
itemValueName: string;
}
},
[OperationLogEventEnum.TRANSFER_DATASET_OWNERSHIP]: {
[AuditEventEnum.TRANSFER_DATASET_OWNERSHIP]: {
content: i18nT('account_team:log_transfer_dataset_ownership'),
typeLabel: i18nT('account_team:transfer_dataset_ownership'),
params: {} as {
@@ -232,18 +342,18 @@ export const operationLogMap = {
newOwnerName: string;
}
},
[OperationLogEventEnum.EXPORT_DATASET]: {
[AuditEventEnum.EXPORT_DATASET]: {
content: i18nT('account_team:log_export_dataset'),
typeLabel: i18nT('account_team:export_dataset'),
params: {} as { name?: string; datasetName: string; datasetType: string }
},
[OperationLogEventEnum.CREATE_DATASET_FOLDER]: {
[AuditEventEnum.CREATE_DATASET_FOLDER]: {
content: i18nT('account_team:log_create_dataset_folder'),
typeLabel: i18nT('account_team:create_dataset_folder'),
params: {} as { name?: string; folderName: string }
},
//Collection
[OperationLogEventEnum.CREATE_COLLECTION]: {
[AuditEventEnum.CREATE_COLLECTION]: {
content: i18nT('account_team:log_create_collection'),
typeLabel: i18nT('account_team:create_collection'),
params: {} as {
@@ -253,7 +363,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.UPDATE_COLLECTION]: {
[AuditEventEnum.UPDATE_COLLECTION]: {
content: i18nT('account_team:log_update_collection'),
typeLabel: i18nT('account_team:update_collection'),
params: {} as {
@@ -263,7 +373,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.DELETE_COLLECTION]: {
[AuditEventEnum.DELETE_COLLECTION]: {
content: i18nT('account_team:log_delete_collection'),
typeLabel: i18nT('account_team:delete_collection'),
params: {} as {
@@ -273,7 +383,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.RETRAIN_COLLECTION]: {
[AuditEventEnum.RETRAIN_COLLECTION]: {
content: i18nT('account_team:log_retrain_collection'),
typeLabel: i18nT('account_team:retrain_collection'),
params: {} as {
@@ -284,7 +394,7 @@ export const operationLogMap = {
}
},
//Data
[OperationLogEventEnum.CREATE_DATA]: {
[AuditEventEnum.CREATE_DATA]: {
content: i18nT('account_team:log_create_data'),
typeLabel: i18nT('account_team:create_data'),
params: {} as {
@@ -294,7 +404,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.UPDATE_DATA]: {
[AuditEventEnum.UPDATE_DATA]: {
content: i18nT('account_team:log_update_data'),
typeLabel: i18nT('account_team:update_data'),
params: {} as {
@@ -304,7 +414,7 @@ export const operationLogMap = {
datasetType: string;
}
},
[OperationLogEventEnum.DELETE_DATA]: {
[AuditEventEnum.DELETE_DATA]: {
content: i18nT('account_team:log_delete_data'),
typeLabel: i18nT('account_team:delete_data'),
params: {} as {
@@ -315,64 +425,60 @@ export const operationLogMap = {
}
},
//SearchTest
[OperationLogEventEnum.SEARCH_TEST]: {
[AuditEventEnum.SEARCH_TEST]: {
content: i18nT('account_team:log_search_test'),
typeLabel: i18nT('account_team:search_test'),
params: {} as { name?: string; datasetName: string; datasetType: string }
},
//Account
[OperationLogEventEnum.CHANGE_PASSWORD]: {
[AuditEventEnum.CHANGE_PASSWORD]: {
content: i18nT('account_team:log_change_password'),
typeLabel: i18nT('account_team:change_password'),
params: {} as { name?: string }
},
[OperationLogEventEnum.CHANGE_NOTIFICATION_SETTINGS]: {
[AuditEventEnum.CHANGE_NOTIFICATION_SETTINGS]: {
content: i18nT('account_team:log_change_notification_settings'),
typeLabel: i18nT('account_team:change_notification_settings'),
params: {} as { name?: string }
},
[OperationLogEventEnum.CHANGE_MEMBER_NAME_ACCOUNT]: {
[AuditEventEnum.CHANGE_MEMBER_NAME_ACCOUNT]: {
content: i18nT('account_team:log_change_member_name_self'),
typeLabel: i18nT('account_team:change_member_name_self'),
params: {} as { name?: string; oldName: string; newName: string }
},
[OperationLogEventEnum.PURCHASE_PLAN]: {
[AuditEventEnum.PURCHASE_PLAN]: {
content: i18nT('account_team:log_purchase_plan'),
typeLabel: i18nT('account_team:purchase_plan'),
params: {} as { name?: string }
},
[OperationLogEventEnum.EXPORT_BILL_RECORDS]: {
[AuditEventEnum.EXPORT_BILL_RECORDS]: {
content: i18nT('account_team:log_export_bill_records'),
typeLabel: i18nT('account_team:export_bill_records'),
params: {} as { name?: string }
},
[OperationLogEventEnum.CREATE_INVOICE]: {
[AuditEventEnum.CREATE_INVOICE]: {
content: i18nT('account_team:log_create_invoice'),
typeLabel: i18nT('account_team:create_invoice'),
params: {} as { name?: string }
},
[OperationLogEventEnum.SET_INVOICE_HEADER]: {
[AuditEventEnum.SET_INVOICE_HEADER]: {
content: i18nT('account_team:log_set_invoice_header'),
typeLabel: i18nT('account_team:set_invoice_header'),
params: {} as { name?: string }
},
[OperationLogEventEnum.CREATE_API_KEY]: {
[AuditEventEnum.CREATE_API_KEY]: {
content: i18nT('account_team:log_create_api_key'),
typeLabel: i18nT('account_team:create_api_key'),
params: {} as { name?: string; keyName: string }
},
[OperationLogEventEnum.UPDATE_API_KEY]: {
[AuditEventEnum.UPDATE_API_KEY]: {
content: i18nT('account_team:log_update_api_key'),
typeLabel: i18nT('account_team:update_api_key'),
params: {} as { name?: string; keyName: string }
},
[OperationLogEventEnum.DELETE_API_KEY]: {
[AuditEventEnum.DELETE_API_KEY]: {
content: i18nT('account_team:log_delete_api_key'),
typeLabel: i18nT('account_team:delete_api_key'),
params: {} as { name?: string; keyName: string }
}
} as const;
export type TemplateParamsMap = {
[K in OperationLogEventEnum]: (typeof operationLogMap)[K]['params'];
};

View File

@@ -1,6 +1,6 @@
{
"name": "app",
"version": "4.9.12",
"version": "4.9.14",
"private": false,
"scripts": {
"dev": "next dev",

View File

@@ -1,4 +1,4 @@
import type { FlexProps} from '@chakra-ui/react';
import type { FlexProps } from '@chakra-ui/react';
import { Box, Flex, Textarea, useBoolean } from '@chakra-ui/react';
import React, { useRef, useCallback, useMemo, useState } from 'react';
import { useTranslation } from 'next-i18next';

View File

@@ -15,8 +15,8 @@ import { useTranslation } from 'next-i18next';
import MyBox from '@fastgpt/web/components/common/MyBox';
import { useScrollPagination } from '@fastgpt/web/hooks/useScrollPagination';
import { getOperationLogs } from '@/web/support/user/team/operantionLog/api';
import { operationLogMap } from '@fastgpt/service/support/operationLog/constants';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { auditLogMap } from '@fastgpt/web/support/user/audit/constants';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { formatTime2YMDHMS } from '@fastgpt/global/common/string/time';
import UserBox from '@fastgpt/web/components/common/UserBox';
import MultipleSelect, {
@@ -27,11 +27,11 @@ import { getTeamMembers } from '@/web/support/user/team/api';
import { specialProcessors } from './processors';
import { defaultMetadataProcessor } from './processors/commonProcessor';
function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
function AuditLog({ Tabs }: { Tabs: React.ReactNode }) {
const { t } = useTranslation();
const [searchParams, setSearchParams] = useState<{
tmbIds?: string[];
events?: OperationLogEventEnum[];
events?: AuditEventEnum[];
}>({});
const { data: members, ScrollData } = useScrollPagination(getTeamMembers, {});
@@ -51,8 +51,8 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
const eventOptions = useMemo(
() =>
Object.values(OperationLogEventEnum).map((event) => ({
label: t(operationLogMap[event].typeLabel),
Object.values(AuditEventEnum).map((event) => ({
label: t(auditLogMap[event].typeLabel),
value: event
})),
[t]
@@ -61,14 +61,14 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
const processMetadataByEvent = useCallback(
(event: string, metadata: any) => {
const defaultFormat = defaultMetadataProcessor(metadata, t);
const specialFormat = specialProcessors[event as OperationLogEventEnum]?.(defaultFormat, t);
const specialFormat = specialProcessors[event as AuditEventEnum]?.(defaultFormat, t);
return specialFormat || defaultFormat;
},
[t]
);
const {
data: operationLogs = [],
data: auditLog = [],
isLoading: loadingLogs,
ScrollData: LogScrollData
} = useScrollPagination(getOperationLogs, {
@@ -92,7 +92,7 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
setValue: setSelectedEvents,
isSelectAll: isSelectAllEvent,
setIsSelectAll: setIsSelectAllEvent
} = useMultipleSelect<OperationLogEventEnum>(
} = useMultipleSelect<AuditEventEnum>(
eventOptions.map((item) => item.value),
true
);
@@ -166,8 +166,8 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
</Tr>
</Thead>
<Tbody>
{operationLogs?.map((log) => {
const i18nData = operationLogMap[log.event];
{auditLog?.map((log) => {
const i18nData = auditLogMap[log.event];
const metadata = processMetadataByEvent(log.event, { ...log.metadata });
return i18nData ? (
@@ -195,4 +195,4 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
);
}
export default OperationLogTable;
export default AuditLog;

View File

@@ -1,10 +1,10 @@
import type { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import type { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { createTeamProcessors } from './teamProcessors';
import { createAppProcessors } from './appProcessors';
import { createDatasetProcessors } from './datasetProcessors';
export type MetadataProcessor = (metadata: any, t: any) => any;
export const specialProcessors: Partial<Record<OperationLogEventEnum, MetadataProcessor>> = {
export const specialProcessors: Partial<Record<AuditEventEnum, MetadataProcessor>> = {
...createTeamProcessors,
...createAppProcessors,
...createDatasetProcessors

View File

@@ -21,7 +21,7 @@ const MemberTable = dynamic(() => import('@/pageComponents/account/team/MemberTa
const PermissionManage = dynamic(
() => import('@/pageComponents/account/team/PermissionManage/index')
);
const OperationLogTable = dynamic(() => import('@/pageComponents/account/team/OperationLog/index'));
const AuditLog = dynamic(() => import('@/pageComponents/account/team/Audit/index'));
const GroupManage = dynamic(() => import('@/pageComponents/account/team/GroupManage/index'));
const OrgManage = dynamic(() => import('@/pageComponents/account/team/OrgManage/index'));
const HandleInviteModal = dynamic(
@@ -96,7 +96,7 @@ const Team = () => {
}}
/>
),
[router, t, teamTab]
[planContent?.permissionTeamOperationLog, router, t, teamTab, toast]
);
return (
@@ -175,7 +175,7 @@ const Team = () => {
{teamTab === TeamTabEnum.org && <OrgManage Tabs={Tabs} />}
{teamTab === TeamTabEnum.group && <GroupManage Tabs={Tabs} />}
{teamTab === TeamTabEnum.permission && <PermissionManage Tabs={Tabs} />}
{teamTab === TeamTabEnum.audit && <OperationLogTable Tabs={Tabs} />}
{teamTab === TeamTabEnum.audit && <AuditLog Tabs={Tabs} />}
</Box>
</Flex>
{invitelinkid && <HandleInviteModal invitelinkid={invitelinkid} />}

View File

@@ -5,10 +5,10 @@ import { authApp } from '@fastgpt/service/support/permission/app/auth';
import { authUserPer } from '@fastgpt/service/support/permission/user/auth';
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
import { onCreateApp } from './create';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { AppTypeEnum } from '@fastgpt/global/core/app/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
export type copyAppQuery = {};
export type copyAppBody = { appId: string };
@@ -46,10 +46,10 @@ async function handler(
pluginData: app.pluginData
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_APP_COPY,
event: AuditEventEnum.CREATE_APP_COPY,
params: {
appName: app.name,
appType: getI18nAppType(app.type)

View File

@@ -19,9 +19,9 @@ import { checkTeamAppLimit } from '@fastgpt/service/support/permission/teamLimit
import { authUserPer } from '@fastgpt/service/support/permission/user/auth';
import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema';
import { type ApiRequestProps } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
export type CreateAppBody = {
parentId?: ParentIdType;
@@ -152,10 +152,10 @@ export const onCreateApp = async ({
);
}
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_APP,
event: AuditEventEnum.CREATE_APP,
params: {
appName: name!,
appType: getI18nAppType(type!)

View File

@@ -19,9 +19,9 @@ import { deleteChatFiles } from '@fastgpt/service/core/chat/controller';
import { pushTrack } from '@fastgpt/service/common/middle/tracks/utils';
import { MongoOpenApi } from '@fastgpt/service/support/openapi/schema';
import { removeImageByPath } from '@fastgpt/service/common/file/image/controller';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
const { appId } = req.query as { appId: string };
@@ -43,10 +43,10 @@ async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
appId
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_APP,
event: AuditEventEnum.DELETE_APP,
params: {
appName: app.name,
appType: getI18nAppType(app.type)

View File

@@ -18,8 +18,8 @@ import { syncCollaborators } from '@fastgpt/service/support/permission/inheritPe
import { MongoResourcePermission } from '@fastgpt/service/support/permission/schema';
import { authUserPer } from '@fastgpt/service/support/permission/user/auth';
import { type ApiRequestProps } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
export type CreateAppFolderBody = {
parentId?: ParentIdType;
name: string;
@@ -85,10 +85,10 @@ async function handler(req: ApiRequestProps<CreateAppFolderBody>) {
}
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_APP_FOLDER,
event: AuditEventEnum.CREATE_APP_FOLDER,
params: {
folderName: name
}

View File

@@ -13,9 +13,9 @@ import { parsePaginationRequest } from '@fastgpt/service/common/api/pagination';
import { type PaginationResponse } from '@fastgpt/web/common/fetch/type';
import { addSourceMember } from '@fastgpt/service/support/user/utils';
import { replaceRegChars } from '@fastgpt/global/common/string/tools';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
async function handler(
req: NextApiRequest,
@@ -148,10 +148,10 @@ async function handler(
const listWithoutTmbId = list.filter((item) => !item.tmbId);
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.EXPORT_APP_CHAT_LOG,
event: AuditEventEnum.EXPORT_APP_CHAT_LOG,
params: {
appName: app.name,
appType: getI18nAppType(app.type)

View File

@@ -24,9 +24,9 @@ import { TeamAppCreatePermissionVal } from '@fastgpt/global/support/permission/u
import { AppErrEnum } from '@fastgpt/global/common/error/code/app';
import { refreshSourceAvatar } from '@fastgpt/service/common/file/image/controller';
import { MongoResourcePermission } from '@fastgpt/service/support/permission/schema';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
import { i18nT } from '@fastgpt/web/i18n/utils';
export type AppUpdateQuery = {
@@ -204,10 +204,10 @@ const logAppMove = ({
app: any;
targetName: string;
}) => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.MOVE_APP,
event: AuditEventEnum.MOVE_APP,
params: {
appName: app.name,
targetFolderName: targetName,
@@ -251,10 +251,10 @@ const logAppUpdate = ({
const { names: newItemNames, values: newItemValues } = getUpdateItems();
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_APP_INFO,
event: AuditEventEnum.UPDATE_APP_INFO,
params: {
appName: app.name,
newItemNames: newItemNames,

View File

@@ -9,9 +9,9 @@ import { getNextTimeByCronStringAndTimezone } from '@fastgpt/global/common/strin
import { type PostPublishAppProps } from '@/global/core/app/api';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { type ApiRequestProps } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
import { i18nT } from '@fastgpt/web/i18n/utils';
async function handler(req: ApiRequestProps<PostPublishAppProps>, res: NextApiResponse<any>) {
@@ -37,10 +37,10 @@ async function handler(req: ApiRequestProps<PostPublishAppProps>, res: NextApiRe
updateTime: new Date()
});
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_PUBLISH_APP,
event: AuditEventEnum.UPDATE_PUBLISH_APP,
params: {
appName: app.name,
operationName: i18nT('account_team:update'),
@@ -99,10 +99,10 @@ async function handler(req: ApiRequestProps<PostPublishAppProps>, res: NextApiRe
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_PUBLISH_APP,
event: AuditEventEnum.UPDATE_PUBLISH_APP,
params: {
appName: app.name,
operationName: isPublish

View File

@@ -4,9 +4,9 @@ import { authDataset } from '@fastgpt/service/support/permission/dataset/auth';
import { createOneCollection } from '@fastgpt/service/core/dataset/collection/controller';
import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const body = req.body as CreateDatasetCollectionParams;
@@ -26,10 +26,10 @@ async function handler(req: NextApiRequest) {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_COLLECTION,
event: AuditEventEnum.CREATE_COLLECTION,
params: {
collectionName: body.name,
datasetName: dataset.name,

View File

@@ -7,9 +7,9 @@ import { delCollection } from '@fastgpt/service/core/dataset/collection/controll
import { authDatasetCollection } from '@fastgpt/service/support/permission/dataset/auth';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
type RetrainingCollectionResponse = {
collectionId: string;
@@ -52,10 +52,10 @@ async function handler(
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.RETRAIN_COLLECTION,
event: AuditEventEnum.RETRAIN_COLLECTION,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -6,9 +6,9 @@ import { mongoSessionRun } from '@fastgpt/service/common/mongo/sessionRun';
import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const { id: collectionId } = req.query as { id: string };
@@ -44,10 +44,10 @@ async function handler(req: NextApiRequest) {
);
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_COLLECTION,
event: AuditEventEnum.DELETE_COLLECTION,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -12,9 +12,9 @@ import { DatasetCollectionTypeEnum } from '@fastgpt/global/core/dataset/constant
import { type ClientSession } from '@fastgpt/service/common/mongo';
import { type CollectionWithDatasetType } from '@fastgpt/global/core/dataset/type';
import { mongoSessionRun } from '@fastgpt/service/common/mongo/sessionRun';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
export type UpdateDatasetCollectionParams = {
id?: string;
parentId?: string;
@@ -135,10 +135,10 @@ async function handler(req: ApiRequestProps<UpdateDatasetCollectionParams>) {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_COLLECTION,
event: AuditEventEnum.UPDATE_COLLECTION,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -18,9 +18,9 @@ import { authDataset } from '@fastgpt/service/support/permission/dataset/auth';
import { checkTeamDatasetLimit } from '@fastgpt/service/support/permission/teamLimit';
import { authUserPer } from '@fastgpt/service/support/permission/user/auth';
import type { ApiRequestProps } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
export type DatasetCreateQuery = {};
export type DatasetCreateBody = CreateDatasetParams;
@@ -102,10 +102,10 @@ async function handler(
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_DATASET,
event: AuditEventEnum.CREATE_DATASET,
params: {
datasetName: name,
datasetType: getI18nDatasetType(type)

View File

@@ -4,9 +4,9 @@ import { deleteDatasetData } from '@/service/core/dataset/data/controller';
import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const { id: dataId } = req.query as {
id: string;
@@ -27,10 +27,10 @@ async function handler(req: NextApiRequest) {
await deleteDatasetData(datasetData);
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_DATA,
event: AuditEventEnum.DELETE_DATA,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -17,9 +17,9 @@ import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { getLLMMaxChunkSize } from '@fastgpt/global/core/dataset/training/utils';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const { collectionId, q, a, indexes } = req.body as InsertOneDatasetDataProps;
@@ -99,10 +99,10 @@ async function handler(req: NextApiRequest) {
});
(() => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_DATA,
event: AuditEventEnum.CREATE_DATA,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -5,9 +5,9 @@ import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { authDatasetData } from '@fastgpt/service/support/permission/dataset/auth';
import { type ApiRequestProps } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: ApiRequestProps<UpdateDatasetDataProps>) {
const { dataId, q, a, indexes = [] } = req.body;
@@ -48,10 +48,10 @@ async function handler(req: ApiRequestProps<UpdateDatasetDataProps>) {
});
(() => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_DATA,
event: AuditEventEnum.UPDATE_DATA,
params: {
collectionName: collection.name,
datasetName: collection.dataset?.name || '',

View File

@@ -11,9 +11,9 @@ import { MongoDatasetCollectionTags } from '@fastgpt/service/core/dataset/tag/sc
import { removeImageByPath } from '@fastgpt/service/common/file/image/controller';
import { DatasetTypeEnum } from '@fastgpt/global/core/dataset/constants';
import { removeWebsiteSyncJobScheduler } from '@fastgpt/service/core/dataset/websiteSync';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const { id: datasetId } = req.query as {
@@ -72,10 +72,10 @@ async function handler(req: NextApiRequest) {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_DATASET,
event: AuditEventEnum.DELETE_DATASET,
params: {
datasetName: dataset.name,
datasetType: getI18nDatasetType(dataset.type)

View File

@@ -17,8 +17,8 @@ import { syncCollaborators } from '@fastgpt/service/support/permission/inheritPe
import { MongoResourcePermission } from '@fastgpt/service/support/permission/schema';
import { authUserPer } from '@fastgpt/service/support/permission/user/auth';
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
export type DatasetFolderCreateQuery = {};
export type DatasetFolderCreateBody = {
parentId?: string;
@@ -95,10 +95,10 @@ async function handler(
}
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_DATASET_FOLDER,
event: AuditEventEnum.CREATE_DATASET_FOLDER,
params: {
folderName: name
}

View File

@@ -14,9 +14,9 @@ import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequencyLimit';
import { type ApiRequestProps } from '@fastgpt/service/type/next';
import { getRerankModel } from '@fastgpt/service/core/ai/model';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: ApiRequestProps<SearchTestProps>): Promise<SearchTestResponse> {
const {
datasetId,
@@ -133,10 +133,10 @@ async function handler(req: ApiRequestProps<SearchTestProps>): Promise<SearchTes
});
}
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.SEARCH_TEST,
event: AuditEventEnum.SEARCH_TEST,
params: {
datasetName: dataset.name,
datasetType: getI18nDatasetType(dataset.type)

View File

@@ -37,9 +37,9 @@ import {
} from '@fastgpt/service/core/dataset/websiteSync';
import { delDatasetRelevantData } from '@fastgpt/service/core/dataset/controller';
import { isEqual } from 'lodash';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
import { getEmbeddingModel, getLLMModel } from '@fastgpt/service/core/ai/model';
import { computedCollectionChunkSettings } from '@fastgpt/global/core/dataset/training/utils';
@@ -368,10 +368,10 @@ const logDatasetMove = ({
targetName: string;
}) => {
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.MOVE_DATASET,
event: AuditEventEnum.MOVE_DATASET,
params: {
datasetName: dataset.name,
targetFolderName: targetName,
@@ -391,10 +391,10 @@ const logDatasetUpdate = ({
dataset: any;
}) => {
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_DATASET,
event: AuditEventEnum.UPDATE_DATASET,
params: {
datasetName: dataset.name,
datasetType: getI18nDatasetType(dataset.type)

View File

@@ -8,8 +8,8 @@ import { ManagePermissionVal } from '@fastgpt/global/support/permission/constant
import { authApp } from '@fastgpt/service/support/permission/app/auth';
import { OpenApiErrEnum } from '@fastgpt/global/common/error/code/openapi';
import { TeamApikeyCreatePermissionVal } from '@fastgpt/global/support/permission/user/constant';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
async function handler(req: ApiRequestProps<EditApiKeyProps>): Promise<string> {
const { appId, name, limit } = req.body;
const { tmbId, teamId } = await (async () => {
@@ -51,10 +51,10 @@ async function handler(req: ApiRequestProps<EditApiKeyProps>): Promise<string> {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_API_KEY,
event: AuditEventEnum.CREATE_API_KEY,
params: {
keyName: name
}

View File

@@ -4,8 +4,8 @@ import { OwnerPermissionVal } from '@fastgpt/global/support/permission/constant'
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import type { ApiRequestProps, ApiResponseType } from '@fastgpt/service/type/next';
import { NextAPI } from '@/service/middleware/entry';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
export type OpenAPIDeleteQuery = { id: string };
export type OpenAPIDeleteBody = {};
export type OpenAPIDeleteResponse = {};
@@ -28,10 +28,10 @@ async function handler(
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_API_KEY,
event: AuditEventEnum.DELETE_API_KEY,
params: {
keyName: openapi.name
}

View File

@@ -4,8 +4,8 @@ import { authOpenApiKeyCrud } from '@fastgpt/service/support/permission/auth/ope
import { OwnerPermissionVal } from '@fastgpt/global/support/permission/constant';
import type { ApiRequestProps } from '@fastgpt/service/type/next';
import { NextAPI } from '@/service/middleware/entry';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
async function handler(req: ApiRequestProps<EditApiKeyProps & { _id: string }>): Promise<void> {
const { _id, name, limit } = req.body;
@@ -17,10 +17,10 @@ async function handler(req: ApiRequestProps<EditApiKeyProps & { _id: string }>):
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_API_KEY,
event: AuditEventEnum.UPDATE_API_KEY,
params: {
keyName: name
}

View File

@@ -5,9 +5,9 @@ import type { PublishChannelEnum } from '@fastgpt/global/support/outLink/constan
import { ManagePermissionVal } from '@fastgpt/global/support/permission/constant';
import type { ApiRequestProps } from '@fastgpt/service/type/next';
import { NextAPI } from '@/service/middleware/entry';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
import { getNanoid } from '@fastgpt/global/common/string/tools';
export type OutLinkCreateQuery = {};
@@ -40,10 +40,10 @@ async function handler(
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CREATE_APP_PUBLISH_CHANNEL,
event: AuditEventEnum.CREATE_APP_PUBLISH_CHANNEL,
params: {
appName: app.name,
channelName: props.name,

View File

@@ -3,9 +3,9 @@ import { authOutLinkCrud } from '@fastgpt/service/support/permission/publish/aut
import { OwnerPermissionVal } from '@fastgpt/global/support/permission/constant';
import type { ApiRequestProps } from '@fastgpt/service/type/next';
import { NextAPI } from '@/service/middleware/entry';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
export type OutLinkDeleteQuery = {
id: string;
@@ -28,10 +28,10 @@ async function handler(
await MongoOutLink.findByIdAndDelete(id);
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.DELETE_APP_PUBLISH_CHANNEL,
event: AuditEventEnum.DELETE_APP_PUBLISH_CHANNEL,
params: {
appName: app.name,
channelName: outLink.name,

View File

@@ -5,9 +5,9 @@ import { ManagePermissionVal } from '@fastgpt/global/support/permission/constant
import type { ApiRequestProps } from '@fastgpt/service/type/next';
import { NextAPI } from '@/service/middleware/entry';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nAppType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nAppType } from '@fastgpt/service/support/user/audit/util';
export type OutLinkUpdateQuery = {};
// {
@@ -55,10 +55,10 @@ async function handler(
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.UPDATE_APP_PUBLISH_CHANNEL,
event: AuditEventEnum.UPDATE_APP_PUBLISH_CHANNEL,
params: {
appName: logApp.name,
channelName: outLink.name,

View File

@@ -9,8 +9,8 @@ import { useIPFrequencyLimit } from '@fastgpt/service/common/middle/reqFrequency
import { pushTrack } from '@fastgpt/service/common/middle/tracks/utils';
import { CommonErrEnum } from '@fastgpt/global/common/error/code/common';
import { UserErrEnum } from '@fastgpt/global/common/error/code/user';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { UserAuthTypeEnum } from '@fastgpt/global/support/user/auth/constants';
import { authCode } from '@fastgpt/service/support/user/auth/controller';
import { createUserSession } from '@fastgpt/service/support/user/session';
@@ -79,10 +79,10 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
teamId: userDetail.team.teamId,
tmbId: userDetail.team.tmbId
});
addOperationLog({
addAuditLog({
tmbId: userDetail.team.tmbId,
teamId: userDetail.team.teamId,
event: OperationLogEventEnum.LOGIN
event: AuditEventEnum.LOGIN
});
return {

View File

@@ -5,8 +5,8 @@ import { MongoUser } from '@fastgpt/service/support/user/schema';
import { MongoTeamMember } from '@fastgpt/service/support/user/team/teamMemberSchema';
import { i18nT } from '@fastgpt/web/i18n/utils';
import { NextAPI } from '@/service/middleware/entry';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
const { oldPsw, newPsw } = req.body as { oldPsw: string; newPsw: string };
@@ -41,10 +41,10 @@ async function handler(req: NextApiRequest, res: NextApiResponse<any>) {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.CHANGE_PASSWORD,
event: AuditEventEnum.CHANGE_PASSWORD,
params: {}
});
})();

View File

@@ -3,9 +3,9 @@ import { authDataset } from '@fastgpt/service/support/permission/dataset/auth';
import { checkExportDatasetLimit } from '@fastgpt/service/support/user/utils';
import { NextAPI } from '@/service/middleware/entry';
import { WritePermissionVal } from '@fastgpt/global/support/permission/constant';
import { addOperationLog } from '@fastgpt/service/support/operationLog/addOperationLog';
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/operationLog/util';
import { addAuditLog } from '@fastgpt/service/support/user/audit/util';
import { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
import { getI18nDatasetType } from '@fastgpt/service/support/user/audit/util';
async function handler(req: NextApiRequest) {
const { datasetId } = req.query as {
@@ -30,10 +30,10 @@ async function handler(req: NextApiRequest) {
});
(async () => {
addOperationLog({
addAuditLog({
tmbId,
teamId,
event: OperationLogEventEnum.EXPORT_DATASET,
event: AuditEventEnum.EXPORT_DATASET,
params: {
datasetName: dataset.name,
datasetType: getI18nDatasetType(dataset.type)

View File

@@ -1,15 +1,11 @@
import { GET, POST, PUT } from '@/web/common/api/request';
import type { PaginationProps, PaginationResponse } from '@fastgpt/web/common/fetch/type';
import type { OperationListItemType } from '@fastgpt/global/support/operationLog/type';
import type { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
import type { OperationListItemType } from '@fastgpt/global/support/user/audit/type';
import type { AuditEventEnum } from '@fastgpt/global/support/user/audit/constants';
export const getOperationLogs = (
props: PaginationProps & {
tmbIds?: string[];
events?: OperationLogEventEnum[];
events?: AuditEventEnum[];
}
) =>
POST<PaginationResponse<OperationListItemType>>(
`/proApi/support/user/team/operationLog/list`,
props
);
) => POST<PaginationResponse<OperationListItemType>>(`/proApi/support/user/audit/list`, props);

View File

@@ -1,8 +1,10 @@
import { vi } from 'vitest';
import './request';
vi.mock(import('@fastgpt/service/support/operationLog/addOperationLog'), () => {
vi.mock(import('@fastgpt/service/support/audit/util'), async (importOriginal) => {
const actual = await importOriginal();
return {
addOperationLog: vi.fn()
...actual,
addAuditLog: vi.fn()
};
});