2024-07-15 00:30:33 +08:00
|
|
|
import { Registrable } from "../registry/index.js";
|
|
|
|
|
import { FormItemProps } from "../dt/index.js";
|
2024-10-02 00:55:20 +08:00
|
|
|
import { HttpClient, ILogger, utils } from "../utils/index.js";
|
|
|
|
|
import _ from "lodash-es";
|
|
|
|
|
import { AccessRequestHandleReq } from "../core";
|
2022-10-26 09:02:47 +08:00
|
|
|
|
2022-12-27 12:32:09 +08:00
|
|
|
export type AccessInputDefine = FormItemProps & {
|
2022-10-31 21:27:32 +08:00
|
|
|
title: string;
|
|
|
|
|
required?: boolean;
|
2024-08-27 13:46:19 +08:00
|
|
|
encrypt?: boolean;
|
2022-10-31 21:27:32 +08:00
|
|
|
};
|
2022-10-26 09:02:47 +08:00
|
|
|
export type AccessDefine = Registrable & {
|
2023-01-11 20:39:48 +08:00
|
|
|
input?: {
|
2022-12-27 12:32:09 +08:00
|
|
|
[key: string]: AccessInputDefine;
|
2022-10-26 09:02:47 +08:00
|
|
|
};
|
|
|
|
|
};
|
2022-11-07 23:31:20 +08:00
|
|
|
export interface IAccessService {
|
2024-09-24 13:50:06 +08:00
|
|
|
getById<T = any>(id: any): Promise<T>;
|
2022-11-07 23:31:20 +08:00
|
|
|
}
|
2023-01-07 23:22:02 +08:00
|
|
|
|
2024-10-01 23:52:44 +08:00
|
|
|
export interface IAccess {
|
|
|
|
|
ctx: AccessContext;
|
|
|
|
|
[key: string]: any;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export type AccessContext = {
|
|
|
|
|
http: HttpClient;
|
|
|
|
|
logger: ILogger;
|
|
|
|
|
utils: typeof utils;
|
|
|
|
|
};
|
2024-10-02 00:55:20 +08:00
|
|
|
|
|
|
|
|
export abstract class BaseAccess implements IAccess {
|
|
|
|
|
ctx!: AccessContext;
|
|
|
|
|
|
|
|
|
|
async onRequest(req: AccessRequestHandleReq) {
|
|
|
|
|
if (!req.action) {
|
|
|
|
|
throw new Error("action is required");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
let methodName = req.action;
|
|
|
|
|
if (!req.action.startsWith("on")) {
|
|
|
|
|
methodName = `on${_.upperFirst(req.action)}`;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
const method = this[methodName];
|
|
|
|
|
if (method) {
|
|
|
|
|
// @ts-ignore
|
|
|
|
|
return await this[methodName](req.data);
|
|
|
|
|
}
|
|
|
|
|
throw new Error(`action ${req.action} not found`);
|
|
|
|
|
}
|
|
|
|
|
}
|