@@ -26,6 +26,7 @@ import MultipleSelect, {
|
||||
} from '@fastgpt/web/components/common/MySelect/MultipleSelect';
|
||||
import Avatar from '@fastgpt/web/components/common/Avatar';
|
||||
import { getTeamMembers } from '@/web/support/user/team/api';
|
||||
import { createMetadataProcessorMap, type MetadataProcessor } from './processors';
|
||||
|
||||
function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
|
||||
const { t } = useTranslation();
|
||||
@@ -58,6 +59,14 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
|
||||
[t]
|
||||
);
|
||||
|
||||
const processMetadataByEvent = useMemo(() => {
|
||||
const metadataProcessorMap = createMetadataProcessorMap();
|
||||
return (event: string, metadata: any) => {
|
||||
const processor = metadataProcessorMap[event as OperationLogEventEnum];
|
||||
return processor ? processor(metadata, t) : metadata;
|
||||
};
|
||||
}, [t]);
|
||||
|
||||
const {
|
||||
data: operationLogs = [],
|
||||
isLoading: loadingLogs,
|
||||
@@ -159,17 +168,7 @@ function OperationLogTable({ Tabs }: { Tabs: React.ReactNode }) {
|
||||
<Tbody>
|
||||
{operationLogs?.map((log) => {
|
||||
const i18nData = operationLogMap[log.event];
|
||||
const metadata = { ...log.metadata };
|
||||
|
||||
if (log.event === OperationLogEventEnum.ASSIGN_PERMISSION) {
|
||||
const permissionValue = parseInt(metadata.permission, 10);
|
||||
|
||||
const permission = new TeamPermission({ per: permissionValue });
|
||||
metadata.appCreate = permission.hasAppCreatePer ? '✔' : '✘';
|
||||
metadata.datasetCreate = permission.hasDatasetCreatePer ? '✔' : '✘';
|
||||
metadata.apiKeyCreate = permission.hasApikeyCreatePer ? '✔' : '✘';
|
||||
metadata.manage = permission.hasManagePer ? '✔' : '✘';
|
||||
}
|
||||
const metadata = processMetadataByEvent(log.event, { ...log.metadata });
|
||||
|
||||
return i18nData ? (
|
||||
<Tr key={log._id} overflow={'unset'}>
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
import { AppPermission } from '@fastgpt/global/support/permission/app/controller';
|
||||
import { createSpecialProcessor } from './commonProcessor';
|
||||
|
||||
export const processUpdateAppCollaboratorSpecific = (metadata: any) => {
|
||||
const permissionValue = parseInt(metadata.permission, 10);
|
||||
const permission = new AppPermission({ per: permissionValue });
|
||||
return {
|
||||
...metadata,
|
||||
readPermission: permission.hasReadPer ? '✔' : '✘',
|
||||
writePermission: permission.hasWritePer ? '✔' : '✘',
|
||||
managePermission: permission.hasManagePer ? '✔' : '✘'
|
||||
};
|
||||
};
|
||||
|
||||
export const createAppProcessors = () => ({
|
||||
UPDATE_APP_COLLABORATOR: createSpecialProcessor(processUpdateAppCollaboratorSpecific)
|
||||
});
|
||||
@@ -0,0 +1,43 @@
|
||||
export interface CommonMetadataFields {
|
||||
appType?: string;
|
||||
datasetType?: string;
|
||||
operationName?: string;
|
||||
itemName?: string;
|
||||
newItemNames?: string[] | string;
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export const defaultMetadataProcessor = (metadata: CommonMetadataFields, t: any): any => {
|
||||
const result = { ...metadata };
|
||||
|
||||
const translatableFields = ['appType', 'datasetType', 'operationName', 'itemName'];
|
||||
|
||||
Object.entries(metadata)
|
||||
.filter(([key, value]) => translatableFields.includes(key) && value)
|
||||
.forEach(([key, value]) => {
|
||||
result[key] = t(value as any);
|
||||
});
|
||||
|
||||
if (metadata.newItemNames) {
|
||||
if (Array.isArray(metadata.newItemNames)) {
|
||||
result.newItemNames = metadata.newItemNames
|
||||
.map((itemName: string) => t(itemName as any))
|
||||
.join(',');
|
||||
} else if (typeof metadata.newItemNames === 'string') {
|
||||
result.newItemNames = metadata.newItemNames
|
||||
.split(',')
|
||||
.map((itemName: string) => t(itemName as any))
|
||||
.join(',');
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
export const createSpecialProcessor = (specificProcessor: (metadata: any) => any) => {
|
||||
return (metadata: any, t: any) => {
|
||||
let processedMetadata = defaultMetadataProcessor(metadata, t);
|
||||
processedMetadata = specificProcessor(processedMetadata);
|
||||
return processedMetadata;
|
||||
};
|
||||
};
|
||||
@@ -0,0 +1,17 @@
|
||||
import { DatasetPermission } from '@fastgpt/global/support/permission/dataset/controller';
|
||||
import { createSpecialProcessor } from './commonProcessor';
|
||||
|
||||
export const processUpdateDatasetCollaboratorSpecific = (metadata: any) => {
|
||||
const permissionValue = parseInt(metadata.permission, 10);
|
||||
const permission = new DatasetPermission({ per: permissionValue });
|
||||
return {
|
||||
...metadata,
|
||||
readPermission: permission.hasReadPer ? '✔' : '✘',
|
||||
writePermission: permission.hasWritePer ? '✔' : '✘',
|
||||
managePermission: permission.hasManagePer ? '✔' : '✘'
|
||||
};
|
||||
};
|
||||
|
||||
export const createDatasetProcessors = () => ({
|
||||
UPDATE_DATASET_COLLABORATOR: createSpecialProcessor(processUpdateDatasetCollaboratorSpecific)
|
||||
});
|
||||
@@ -0,0 +1,30 @@
|
||||
import { OperationLogEventEnum } from '@fastgpt/global/support/operationLog/constants';
|
||||
import { defaultMetadataProcessor } from './commonProcessor';
|
||||
import { createTeamProcessors } from './teamProcessors';
|
||||
import { createAppProcessors } from './appProcessors';
|
||||
import { createDatasetProcessors } from './datasetProcessors';
|
||||
|
||||
export type MetadataProcessor = (metadata: any, t: any) => any;
|
||||
|
||||
export const createMetadataProcessorMap = (): Record<OperationLogEventEnum, MetadataProcessor> => {
|
||||
const specialProcessors: Partial<Record<OperationLogEventEnum, MetadataProcessor>> = {
|
||||
...createTeamProcessors(),
|
||||
...createAppProcessors(),
|
||||
...createDatasetProcessors()
|
||||
};
|
||||
|
||||
const processorMap = {} as Record<OperationLogEventEnum, MetadataProcessor>;
|
||||
|
||||
Object.values(OperationLogEventEnum).forEach((event) => {
|
||||
processorMap[event] =
|
||||
specialProcessors[event] ||
|
||||
((metadata: any, t: any) => defaultMetadataProcessor(metadata, t));
|
||||
});
|
||||
|
||||
return processorMap;
|
||||
};
|
||||
|
||||
export * from './commonProcessor';
|
||||
export * from './teamProcessors';
|
||||
export * from './appProcessors';
|
||||
export * from './datasetProcessors';
|
||||
@@ -0,0 +1,19 @@
|
||||
import { TeamPermission } from '@fastgpt/global/support/permission/user/controller';
|
||||
import { createSpecialProcessor } from './commonProcessor';
|
||||
|
||||
export const processAssignPermissionSpecific = (metadata: any) => {
|
||||
const permissionValue = parseInt(metadata.permission, 10);
|
||||
const permission = new TeamPermission({ per: permissionValue });
|
||||
|
||||
return {
|
||||
...metadata,
|
||||
appCreate: permission.hasAppCreatePer ? '✔' : '✘',
|
||||
datasetCreate: permission.hasDatasetCreatePer ? '✔' : '✘',
|
||||
apiKeyCreate: permission.hasApikeyCreatePer ? '✔' : '✘',
|
||||
manage: permission.hasManagePer ? '✔' : '✘'
|
||||
};
|
||||
};
|
||||
|
||||
export const createTeamProcessors = () => ({
|
||||
ASSIGN_PERMISSION: createSpecialProcessor(processAssignPermissionSpecific)
|
||||
});
|
||||
Reference in New Issue
Block a user