userEntityGrant 增加confirm动作的触发器

This commit is contained in:
梁朝伟 2022-06-08 18:29:14 +08:00
parent 5f1865d211
commit 10bcae0bb8
10 changed files with 68 additions and 21 deletions

View File

@ -7,7 +7,7 @@ export declare abstract class GeneralRuntimeContext<ED extends EntityDict> exten
private scene;
constructor(store: RowStore<ED, GeneralRuntimeContext<ED>>, appId: string, getToken: () => Promise<string | undefined>, scene: string);
getApplicationId(): string;
getApplication(): Promise<import("oak-domain/lib/types").SelectRowShape<import("general-app-domain/Application/Schema").Schema, {
getApplication(): Promise<import("oak-domain/lib/types").SelectRowShape<EntityDict, {
id: 1;
name: 1;
config: 1;

View File

@ -9,13 +9,4 @@ export declare function createWechatQrCode<ED extends EntityDict, T extends keyo
lifetimeLength?: number;
permanent?: boolean;
props: WechatQrCodeProps;
}, context: Cxt): Promise<Omit<Omit<import("general-app-domain/WechatQrCode/Schema").OpSchema, "applicationId" | "entity" | "entityId">, import("oak-domain/lib/types").InstinctiveAttributes> & {
id: string;
} & {
applicationId: string;
application?: import("general-app-domain/Application/Schema").UpdateOperation | undefined;
} & {
[K: string]: any;
} & {
[k: string]: any;
}>;
}, context: Cxt): Promise<CreateWechatQrcodeData>;

View File

@ -1,2 +1,2 @@
declare const _default: (import("oak-domain/lib/types").Checker<import("general-app-domain").EntityDict, "address", import("..").GeneralRuntimeContext<import("general-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("general-app-domain").EntityDict, "token", import("..").GeneralRuntimeContext<import("general-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("general-app-domain").EntityDict, "user", import("..").GeneralRuntimeContext<import("general-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("general-app-domain").EntityDict, "userEntityGrant", import("..").GeneralRuntimeContext<import("general-app-domain").EntityDict>> | import("oak-domain/lib/types").Checker<import("general-app-domain").EntityDict, "wechatQrCode", import("..").GeneralRuntimeContext<import("general-app-domain").EntityDict>>)[];
declare const _default: (import("oak-domain/lib/types").Checker<EntityDict, "address", import("..").GeneralRuntimeContext<EntityDict>> | import("oak-domain/lib/types").Checker<EntityDict, "token", import("..").GeneralRuntimeContext<EntityDict>> | import("oak-domain/lib/types").Checker<EntityDict, "user", import("..").GeneralRuntimeContext<EntityDict>> | import("oak-domain/lib/types").Checker<EntityDict, "userEntityGrant", import("..").GeneralRuntimeContext<EntityDict>> | import("oak-domain/lib/types").Checker<EntityDict, "wechatQrCode", import("..").GeneralRuntimeContext<EntityDict>>)[];
export default _default;

4
lib/data/index.d.ts vendored
View File

@ -1,6 +1,6 @@
declare const _default: {
user: import("general-app-domain/User/Schema").CreateOperationData[];
role: import("general-app-domain/Role/Schema").CreateOperationData[];
user: UserCreate[];
role: RoleCreate[];
area: ({
code: string;
level: string;

View File

@ -13,5 +13,5 @@ export declare class Token<ED extends EntityDict, Cxt extends Context<ED>, AD ex
logout(): Promise<void>;
getToken(): Promise<string | undefined>;
setCache(cache: Cache<ED, Cxt, AD>): void;
getUserId(): Promise<("userId" extends keyof ED["token"]["Schema"] ? ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & "userId"] extends 1 | undefined ? ED["token"]["Schema"][keyof ED["token"]["Schema"] & "userId"] : ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & "userId"] extends import("oak-domain/lib/types").OtmSubProjection ? never[] | import("oak-domain/lib/types").SelectRowShape<Required<ED["token"]["Schema"]>[keyof ED["token"]["Schema"] & "userId"][0], ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & "userId"]["data"]>[] : keyof ED["token"]["Schema"] & "userId" extends import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> ? import("oak-domain/lib/types").SelectRowShape<NonNullable<Required<ED["token"]["Schema"]>[import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> & keyof ED["token"]["Schema"] & "userId"]>, ED["token"]["Selection"]["data"][import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> & keyof ED["token"]["Schema"] & "userId"]> | null : import("oak-domain/lib/types").SelectRowShape<NonNullable<Required<ED["token"]["Schema"]>[keyof ED["token"]["Schema"] & "userId"]>, ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & "userId"]> : never) | undefined>;
getUserId(): Promise<string extends keyof ED["token"]["Schema"] ? ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & string] extends 1 | undefined ? ED["token"]["Schema"][keyof ED["token"]["Schema"] & string] : ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & string] extends import("oak-domain/lib/types").OtmSubProjection ? never[] | import("oak-domain/lib/types").SelectRowShape<Required<ED["token"]["Schema"]>[keyof ED["token"]["Schema"] & string][0], ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & string]["data"]>[] : keyof ED["token"]["Schema"] & string extends import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> ? import("oak-domain/lib/types").SelectRowShape<NonNullable<Required<ED["token"]["Schema"]>[import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> & keyof ED["token"]["Schema"] & string]>, ED["token"]["Selection"]["data"][import("oak-domain/lib/types").OptionalKeys<ED["token"]["Schema"]> & keyof ED["token"]["Schema"] & string]> | null : import("oak-domain/lib/types").SelectRowShape<NonNullable<Required<ED["token"]["Schema"]>[keyof ED["token"]["Schema"] & string]>, ED["token"]["Selection"]["data"][keyof ED["token"]["Schema"] & string]> : never>;
}

View File

@ -1,4 +1,3 @@
import { EntityDict as BaseEntityDict } from 'general-app-domain/EntityDict';
import { Trigger } from 'oak-domain/lib/types';
declare const _default: (Trigger<BaseEntityDict, "address", import("..").GeneralRuntimeContext<BaseEntityDict>> | Trigger<BaseEntityDict, "user", import("..").GeneralRuntimeContext<BaseEntityDict>> | Trigger<BaseEntityDict, "userEntityGrant", import("..").GeneralRuntimeContext<BaseEntityDict>> | Trigger<BaseEntityDict, "wechatQrCode", import("..").GeneralRuntimeContext<BaseEntityDict>>)[];
declare const _default: (Trigger<EntityDict, "address", import("..").GeneralRuntimeContext<EntityDict>> | Trigger<EntityDict, "user", import("..").GeneralRuntimeContext<EntityDict>> | Trigger<EntityDict, "userEntityGrant", import("..").GeneralRuntimeContext<EntityDict>> | Trigger<EntityDict, "wechatQrCode", import("..").GeneralRuntimeContext<EntityDict>>)[];
export default _default;

View File

@ -1,4 +1,4 @@
import { OpSchema as ExtraFile } from 'general-app-domain/ExtraFile/Schema';
import { SystemConfig } from 'general-app-domain/System/Schema';
export declare function composeFileUrl(extraFile: Pick<ExtraFile, 'type' | 'bucket' | 'filename' | 'origin' | 'extra1' | 'objectId' | 'extension' | 'entity'>, systemConfig?: SystemConfig): string;
export declare function composeFileUrl(extraFile: Pick<ExtraFile, 'type' | 'bucket' | 'filename' | 'origin' | 'extra1' | 'objectId' | 'extension' | 'entity'>, systemConfig?: SystemConfig): any;
export declare function decomposeFileUrl(url: string): Pick<ExtraFile, 'bucket' | 'filename' | 'origin' | 'type' | 'extra1'>;

View File

@ -1,5 +1,4 @@
import { EntityDict } from 'general-app-domain';
import { Watcher } from 'oak-domain/lib/types';
import { GeneralRuntimeContext } from '../RuntimeContext';
declare const _default: Watcher<EntityDict, keyof EntityDict, GeneralRuntimeContext<EntityDict>>[];
declare const _default: Watcher<EntityDict, string | number | symbol, GeneralRuntimeContext<EntityDict>>[];
export default _default;

View File

@ -21,6 +21,7 @@ export interface Schema extends EntityShape {
}
type Action = 'confirm';
type IState = 'init';
const indexes: Index<Schema>[] = [
{
@ -49,6 +50,7 @@ const indexes: Index<Schema>[] = [
const locale: LocaleDef<Schema, Action, '', {
type: Schema['type'];
iState: IState;
}> = {
zh_CN: {
attr: {
@ -73,6 +75,9 @@ const locale: LocaleDef<Schema, Action, '', {
grant: '授予',
transfer: '转交',
},
}
iState: {
init: '初始',
},
},
},
};

View File

@ -84,5 +84,58 @@ const triggers: Trigger<EntityDict, 'userEntityGrant', GeneralRuntimeContext<Ent
return 0;
}
},
{
name: '当创建userEntityGrant确认时附上被授权者id',
entity: 'userEntityGrant',
action: 'confirm',
when: 'after',
fn: async ({ operation }, context, params) => {
const { data, filter } = operation;
const { userId } = (await context.getToken())!;
const { result } = await context.rowStore.select('userEntityGrant', {
data: {
id: 1,
entity: 1,
entityId: 1,
relation: 1,
},
filter: {
id: filter!.id,
},
indexFrom: 0,
count: 1,
}, context, params);
const { entity, entityId, relation } = result[0];
const entityStr = entity[0].toLocaleUpperCase() + entity.substring(1, entity.length);
const userRelation = `user${entityStr}` as keyof EntityDict;
const {result: result2} = await context.rowStore.select(userRelation, {
data: {
id: 1,
},
filter: {
userId,
relation,
[`${entity}Id`]: entityId,
},
indexFrom: 0,
count: 1,
}, context, params);
if (result2.length) {
throw new OakCongruentRowExists(result2[0] as any, '已领用该权限');
}
else {
await context.rowStore.operate(userRelation, {
action: 'create',
data: {
userId,
[`${entity}Id`]: entityId,
relation,
} as any,
}, context);
console.log(context.rowStore);
return 1;
}
}
}
];
export default triggers;