backendRuntimeContext中对tokenId的重新设计

This commit is contained in:
Xu Chang 2024-05-09 21:36:34 +08:00
parent b53d8fb469
commit fc0c0b235c
14 changed files with 84 additions and 87 deletions

View File

@ -1,7 +1,7 @@
import { Style } from '../../../../types/Style';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../../oak-app-domain").EntityDict, keyof import("../../../../oak-app-domain").EntityDict, false, {
style: Style;
entity: "application" | "system" | "platform";
entity: "application" | "platform" | "system";
entityId: string;
name: string;
}>) => React.ReactElement;

View File

@ -1,7 +1,7 @@
import { Config } from '../../../types/Config';
declare const _default: (props: import("oak-frontend-base").ReactComponentProps<import("../../../oak-app-domain").EntityDict, keyof import("../../../oak-app-domain").EntityDict, false, {
config: Config;
entity: "system" | "platform";
entity: "platform" | "system";
name: string;
entityId: string;
}>) => React.ReactElement;

View File

@ -15,17 +15,17 @@ declare const _default: <ED2 extends EntityDict & BaseEntityDict, T2 extends key
buttonProps?: (ButtonProps & {
color?: "default" | "success" | "warning" | "primary" | "danger" | undefined;
fill?: "none" | "solid" | "outline" | undefined;
size?: "small" | "large" | "middle" | "mini" | undefined;
size?: "small" | "middle" | "large" | "mini" | undefined;
block?: boolean | undefined;
loading?: boolean | "auto" | undefined;
loadingText?: string | undefined;
loadingIcon?: import("react").ReactNode;
disabled?: boolean | undefined;
onClick?: ((event: import("react").MouseEvent<HTMLButtonElement, MouseEvent>) => unknown) | undefined;
type?: "reset" | "submit" | "button" | undefined;
type?: "button" | "submit" | "reset" | undefined;
shape?: "default" | "rounded" | "rectangular" | undefined;
children?: import("react").ReactNode;
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseUp" | "onMouseDown" | "onTouchStart" | "onTouchEnd"> & {
} & Pick<import("react").ClassAttributes<HTMLButtonElement> & import("react").ButtonHTMLAttributes<HTMLButtonElement>, "id" | "onMouseDown" | "onMouseUp" | "onTouchStart" | "onTouchEnd"> & {
className?: string | undefined;
style?: (import("react").CSSProperties & Partial<Record<"--text-color" | "--background-color" | "--border-radius" | "--border-width" | "--border-style" | "--border-color", string>>) | undefined;
tabIndex?: number | undefined;

View File

@ -4,8 +4,8 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
entity: keyof EntityDict;
entityFilter: any;
relationIds: string[];
rule: "single" | "all" | "free";
ruleOnRow: "single" | "all" | "free";
rule: "all" | "single" | "free";
ruleOnRow: "all" | "single" | "free";
onPickRelations: (ids: string[]) => void;
onPickRows: (ids: string[]) => void;
pickedRowIds: string[] | undefined;

View File

@ -11,7 +11,7 @@ declare const _default: (props: import("oak-frontend-base").ReactComponentProps<
claimUrl: string;
qrCodeType: QrCodeType;
multiple: boolean;
rule: "single" | "all" | "free";
ruleOnRow: "single" | "all" | "free";
rule: "all" | "single" | "free";
ruleOnRow: "all" | "single" | "free";
}>) => React.ReactElement;
export default _default;

View File

@ -14,7 +14,7 @@ export declare abstract class BackendRuntimeContext<ED extends EntityDict & Base
protected rootMode?: boolean;
private userId?;
refineOpRecords(): Promise<void>;
setTokenValue(tokenValue: string, later?: boolean, userId?: string): Promise<void>;
setTokenValue(tokenValue: string, userId?: string): Promise<void>;
setApplication(appId: string): Promise<void>;
initialize(data?: SerializedData, later?: boolean): Promise<void>;
getApplicationId(): ED["application"]["Schema"]["id"] | undefined;

View File

@ -43,8 +43,9 @@ export class BackendRuntimeContext extends BRC {
}
}
}
async setTokenValue(tokenValue, later, userId) {
if (!later || !userId) {
async setTokenValue(tokenValue, userId) {
if (tokenValue) {
// 前台传递
const result = await this.select('token', {
data: {
id: 1,
@ -54,6 +55,7 @@ export class BackendRuntimeContext extends BRC {
userState: 1,
isRoot: 1,
},
userId: 1,
value: 1,
player: {
id: 1,
@ -69,37 +71,34 @@ export class BackendRuntimeContext extends BRC {
});
if (result.length === 0) {
console.log(`构建BackendRuntimeContext对应tokenValue「${tokenValue}找不到相关的user`);
if (!later) {
throw new OakTokenExpiredException();
}
// this.tokenException = new OakTokenExpiredException();
return;
throw new OakTokenExpiredException();
}
const token = result[0];
if (token.ableState === 'disabled' && !later) {
if (token.ableState === 'disabled') {
console.log(`构建BackendRuntimeContext对应tokenValue「${tokenValue}已经被disable`);
throw new OakTokenExpiredException();
// this.tokenException = new OakTokenExpiredException();
return;
}
const { user, player } = token;
this.amIRoot = user?.isRoot;
this.amIReallyRoot = player?.isRoot;
this.token = token;
this.userId = token.userId;
return;
}
// 若是later环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
assert(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot;
this.amIReallyRoot = user.isRoot;
this.userId = userId;
if (userId) {
// 若是后台环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
assert(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot;
this.amIReallyRoot = user.isRoot;
this.userId = userId;
}
}
async setApplication(appId) {
const result = await this.select('application', {
@ -125,7 +124,7 @@ export class BackendRuntimeContext extends BRC {
promises.push(this.setApplication(appId));
}
if (tokenValue) {
promises.push(this.setTokenValue(tokenValue, later, userId));
promises.push(this.setTokenValue(tokenValue, userId));
}
if (promises.length > 0) {
await Promise.all(promises);
@ -195,10 +194,10 @@ export class BackendRuntimeContext extends BRC {
}
async getSerializedData() {
const data = await super.getSerializedData();
// 后台物化上下文直接存userId;
return {
...data,
a: this.application?.id,
t: this.token?.value,
rm: this.rootMode,
userId: this.getCurrentUserId(true),
};

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<0 | 1>;
}, userIds?: string[]): Promise<1 | 0>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -14,7 +14,7 @@ export declare abstract class BackendRuntimeContext<ED extends EntityDict & Base
protected rootMode?: boolean;
private userId?;
refineOpRecords(): Promise<void>;
setTokenValue(tokenValue: string, later?: boolean, userId?: string): Promise<void>;
setTokenValue(tokenValue: string, userId?: string): Promise<void>;
setApplication(appId: string): Promise<void>;
initialize(data?: SerializedData, later?: boolean): Promise<void>;
getApplicationId(): ED["application"]["Schema"]["id"] | undefined;

View File

@ -46,8 +46,9 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext {
}
}
}
async setTokenValue(tokenValue, later, userId) {
if (!later || !userId) {
async setTokenValue(tokenValue, userId) {
if (tokenValue) {
// 前台传递
const result = await this.select('token', {
data: {
id: 1,
@ -57,6 +58,7 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext {
userState: 1,
isRoot: 1,
},
userId: 1,
value: 1,
player: {
id: 1,
@ -72,37 +74,34 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext {
});
if (result.length === 0) {
console.log(`构建BackendRuntimeContext对应tokenValue「${tokenValue}找不到相关的user`);
if (!later) {
throw new Exception_1.OakTokenExpiredException();
}
// this.tokenException = new OakTokenExpiredException();
return;
throw new Exception_1.OakTokenExpiredException();
}
const token = result[0];
if (token.ableState === 'disabled' && !later) {
if (token.ableState === 'disabled') {
console.log(`构建BackendRuntimeContext对应tokenValue「${tokenValue}已经被disable`);
throw new Exception_1.OakTokenExpiredException();
// this.tokenException = new OakTokenExpiredException();
return;
}
const { user, player } = token;
this.amIRoot = user?.isRoot;
this.amIReallyRoot = player?.isRoot;
this.token = token;
this.userId = token.userId;
return;
}
// 若是later环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
(0, assert_1.assert)(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot;
this.amIReallyRoot = user.isRoot;
this.userId = userId;
if (userId) {
// 若是后台环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
(0, assert_1.assert)(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot;
this.amIReallyRoot = user.isRoot;
this.userId = userId;
}
}
async setApplication(appId) {
const result = await this.select('application', {
@ -128,7 +127,7 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext {
promises.push(this.setApplication(appId));
}
if (tokenValue) {
promises.push(this.setTokenValue(tokenValue, later, userId));
promises.push(this.setTokenValue(tokenValue, userId));
}
if (promises.length > 0) {
await Promise.all(promises);
@ -198,10 +197,10 @@ class BackendRuntimeContext extends oak_frontend_base_1.BackendRuntimeContext {
}
async getSerializedData() {
const data = await super.getSerializedData();
// 后台物化上下文直接存userId;
return {
...data,
a: this.application?.id,
t: this.token?.value,
rm: this.rootMode,
userId: this.getCurrentUserId(true),
};

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "message", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "address", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "application", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "article", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "articleMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "extraFile", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "user", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "userEntityGrant", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatQrCode", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "notification", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatLogin", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "parasite", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "sessionMessage", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMenu", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatPublicTag", import("..").BRC<import("../oak-app-domain").EntityDict>> | import("oak-domain/lib/types").Trigger<import("../oak-app-domain").EntityDict, "wechatMpJump", import("..").BRC<import("../oak-app-domain").EntityDict>>)[];
export default _default;

View File

@ -14,7 +14,7 @@ export declare function createToDo<ED extends EntityDict & BaseEntityDict, T ext
redirectTo: EntityDict['toDo']['OpSchema']['redirectTo'];
entity: any;
entityId: string;
}, userIds?: string[]): Promise<0 | 1>;
}, userIds?: string[]): Promise<1 | 0>;
/**
* todo例程entity对象上进行action操作时filtertodo完成
* entity的action的后trigger中调用

View File

@ -65,8 +65,9 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
}
}
async setTokenValue(tokenValue: string, later?: boolean, userId?: string) {
if (!later || !userId) {
async setTokenValue(tokenValue: string, userId?: string) {
if (tokenValue) {
// 前台传递
const result = await this.select(
'token',
{
@ -78,6 +79,7 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
userState: 1,
isRoot: 1,
},
userId: 1,
value: 1,
player: {
id: 1,
@ -97,39 +99,36 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
console.log(
`构建BackendRuntimeContext对应tokenValue「${tokenValue}找不到相关的user`
);
if (!later) {
throw new OakTokenExpiredException();
}
// this.tokenException = new OakTokenExpiredException();
return;
throw new OakTokenExpiredException();
}
const token = result[0];
if (token.ableState === 'disabled' && !later) {
if (token.ableState === 'disabled') {
console.log(
`构建BackendRuntimeContext对应tokenValue「${tokenValue}已经被disable`
);
throw new OakTokenExpiredException();
// this.tokenException = new OakTokenExpiredException();
return;
}
const { user, player } = token;
this.amIRoot = user?.isRoot!;
this.amIReallyRoot = player?.isRoot!;
this.token = token;
this.userId = token.userId!;
return;
}
// 若是later环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
assert(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot!;
this.amIReallyRoot = user.isRoot!;
this.userId = userId;
if (userId) {
// 若是后台环境用userId来查询处理
const [user] = await this.select('user', {
data: {
id: 1,
isRoot: 1,
},
filter: { id: userId },
}, { dontCollect: true });
assert(user, '初始化context时有userId但查询不到user');
this.amIRoot = user.isRoot!;
this.amIReallyRoot = user.isRoot!;
this.userId = userId;
}
}
async setApplication(appId: string) {
@ -164,7 +163,7 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
promises.push(this.setApplication(appId));
}
if (tokenValue) {
promises.push(this.setTokenValue(tokenValue, later, userId));
promises.push(this.setTokenValue(tokenValue, userId));
}
if (promises.length > 0) {
await Promise.all(promises);
@ -243,10 +242,10 @@ export abstract class BackendRuntimeContext<ED extends EntityDict & BaseEntityDi
protected async getSerializedData(): Promise<SerializedData> {
const data = await super.getSerializedData();
// 后台物化上下文直接存userId;
return {
...data,
a: this.application?.id,
t: this.token?.value,
rm: this.rootMode,
userId: this.getCurrentUserId(true),
};