feat: 修改了oauth服务相关的实体定义

This commit is contained in:
Pan Qiancheng 2025-10-22 18:17:28 +08:00
parent 476b68ab1c
commit 7baa7f808c
38 changed files with 381 additions and 80 deletions

View File

@ -15,7 +15,8 @@ export interface Schema extends EntityShape {
isConfidential: Boolean;
scopes?: StringListJson;
}
export type Action = AbleAction;
export type SecretAction = 'resetSecret';
export type Action = AbleAction | SecretAction;
export declare const AbleActionDef: ActionDef<AbleAction, AbleState>;
export declare const entityDesc: EntityDesc<Schema, Action, '', {
ableState: AbleState;

View File

@ -20,6 +20,7 @@ export const entityDesc = {
action: {
enable: '启用',
disable: '禁用',
resetSecret: '重置密钥',
},
v: {
ableState: {

View File

@ -1,13 +1,22 @@
import { Datetime } from 'oak-domain/lib/types/DataType';
import { Schema as User } from './User';
import { EntityShape } from 'oak-domain/lib/types/Entity';
import { ActionDef } from 'oak-domain/lib/types';
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
import { Schema as OauthApplication } from './OauthApplication';
import { Schema as OauthToken } from './OauthToken';
import { Schema as OauthAuthorizationCode } from './OauthAuthorizationCode';
export interface Schema extends EntityShape {
user: User;
application: OauthApplication;
authorizedAt: Datetime;
token: OauthToken;
code?: OauthAuthorizationCode;
token?: OauthToken;
}
export declare const entityDesc: EntityDesc<Schema, '', '', {}>;
export type UsageState = 'granted' | 'denied' | 'revoked';
export type UsageAction = 'revoke';
export type Action = UsageAction;
export declare const UsageActionDef: ActionDef<UsageAction, UsageState>;
export declare const entityDesc: EntityDesc<Schema, Action, '', {
usageState: UsageState;
}>;

View File

@ -1,4 +1,9 @@
;
export const UsageActionDef = {
stm: {
revoke: ['granted', "revoked"]
}
};
export const entityDesc = {
locales: {
zh_CN: {
@ -9,7 +14,31 @@ export const entityDesc = {
application: 'Oauth应用',
authorizedAt: '首次授权时间',
token: '关联的令牌',
code: '授权码',
usageState: '授权状态',
},
action: {
revoke: '撤销授权',
},
v: {
usageState: {
granted: '已授权',
denied: '未授权',
revoked: '已撤销',
}
}
},
},
style: {
icon: {
revoke: 'fa-user-slash',
},
color: {
usageState: {
granted: '#28a745',
denied: '#dc3545',
revoked: '#6c757d',
}
}
}
};

View File

@ -31,6 +31,9 @@ export declare const actionDefDict: {
oauthProvider: {
ableState: import("oak-domain/lib/types").ActionDef<import("oak-domain/lib/actions/action").AbleAction, import("oak-domain/lib/actions/action").AbleState>;
};
oauthUserAuthorization: {
usageState: import("oak-domain/lib/types").ActionDef<string, string>;
};
parasite: {};
toDo: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;

View File

@ -9,6 +9,7 @@ import { actionDefDict as mobile } from "./Mobile/Action";
import { actionDefDict as notification } from "./Notification/Action";
import { actionDefDict as oauthApplication } from "./OauthApplication/Action";
import { actionDefDict as oauthProvider } from "./OauthProvider/Action";
import { actionDefDict as oauthUserAuthorization } from "./OauthUserAuthorization/Action";
import { actionDefDict as parasite } from "./Parasite/Action";
import { actionDefDict as toDo } from "./ToDo/Action";
import { actionDefDict as token } from "./Token/Action";
@ -30,6 +31,7 @@ export const actionDefDict = {
notification,
oauthApplication,
oauthProvider,
oauthUserAuthorization,
parasite,
toDo,
token,

View File

@ -2223,7 +2223,9 @@ export type OauthAuthorizationCode = {
application: OauthApplication["Schema"];
user: User["Schema"];
oauthToken$code?: Array<Omit<OauthToken["Schema"], "code">>;
oauthUserAuthorization$code?: Array<Omit<OauthUserAuthorization["Schema"], "code">>;
oauthToken$code$$aggr?: AggregationResult<Omit<OauthToken["Schema"], "code">>;
oauthUserAuthorization$code$$aggr?: AggregationResult<Omit<OauthUserAuthorization["Schema"], "code">>;
};
Projection: BaseOauthAuthorizationCode.OpProjection & {
application?: OauthApplication["Projection"];
@ -2234,11 +2236,18 @@ export type OauthAuthorizationCode = {
oauthToken$code$$aggr?: DeduceAggregation<Omit<OauthToken["Projection"], "oauthAuthorizationCode">, Omit<OauthToken["Filter"], "oauthAuthorizationCode">, OauthToken["Sorter"]> & {
$entity: "oauthToken";
};
oauthUserAuthorization$code?: OakSelection<"select", Omit<OauthUserAuthorization["Projection"], "oauthAuthorizationCode">, Omit<OauthUserAuthorization["Filter"], "oauthAuthorizationCode">, OauthUserAuthorization["Sorter"]> & {
$entity: "oauthUserAuthorization";
};
oauthUserAuthorization$code$$aggr?: DeduceAggregation<Omit<OauthUserAuthorization["Projection"], "oauthAuthorizationCode">, Omit<OauthUserAuthorization["Filter"], "oauthAuthorizationCode">, OauthUserAuthorization["Sorter"]> & {
$entity: "oauthUserAuthorization";
};
};
FilterUnit: BaseOauthAuthorizationCode.OpFilter & {
application: MakeFilter<OauthApplication["FilterUnit"]>;
user: MakeFilter<User["FilterUnit"]>;
oauthToken$code: MakeFilter<Omit<OauthToken["FilterUnit"], "code">> & SubQueryPredicateMetadata;
oauthUserAuthorization$code: MakeFilter<Omit<OauthUserAuthorization["FilterUnit"], "code">> & SubQueryPredicateMetadata;
};
Filter: MakeFilter<OauthAuthorizationCode["FilterUnit"]>;
SortAttr: Partial<BaseOauthAuthorizationCode.OpSortAttr | {
@ -2256,6 +2265,7 @@ export type OauthAuthorizationCode = {
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]>;
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]>;
oauthToken$code?: (OakOperation<"create", Omit<OauthToken["CreateOperationData"], "code"> | Omit<OauthToken["CreateOperationData"], "code">[]> | OakOperation<BaseOauthToken.OpUpdateAction, Omit<OauthToken["UpdateOperationData"], "code">, OauthToken["Filter"]>)[];
oauthUserAuthorization$code?: (OakOperation<"create", Omit<OauthUserAuthorization["CreateOperationData"], "code"> | Omit<OauthUserAuthorization["CreateOperationData"], "code">[]> | OakOperation<BaseOauthUserAuthorization.OpUpdateAction, Omit<OauthUserAuthorization["UpdateOperationData"], "code">, OauthUserAuthorization["Filter"]>)[];
}>;
CreateSingle: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<OauthAuthorizationCode["CreateOperationData"]>>;
@ -2264,6 +2274,7 @@ export type OauthAuthorizationCode = {
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]> | OakOperation<"remove", OauthApplication["RemoveOperationData"], OauthApplication["Filter"]>;
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]> | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>;
oauthToken$code?: (OakOperation<"create", Omit<OauthToken["CreateOperationData"], "code"> | Omit<OauthToken["CreateOperationData"], "code">[]> | OakOperation<BaseOauthToken.OpUpdateAction, Omit<OauthToken["UpdateOperationData"], "code">, OauthToken["Filter"]> | OakOperation<"remove", OauthToken["RemoveOperationData"], OauthToken["Filter"]>)[];
oauthUserAuthorization$code?: (OakOperation<"create", Omit<OauthUserAuthorization["CreateOperationData"], "code"> | Omit<OauthUserAuthorization["CreateOperationData"], "code">[]> | OakOperation<BaseOauthUserAuthorization.OpUpdateAction, Omit<OauthUserAuthorization["UpdateOperationData"], "code">, OauthUserAuthorization["Filter"]> | OakOperation<"remove", OauthUserAuthorization["RemoveOperationData"], OauthUserAuthorization["Filter"]>)[];
}>;
Update: OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"], OauthAuthorizationCode["Sorter"]>;
RemoveOperationData: {};
@ -2509,22 +2520,26 @@ export type OauthUserAuthorization = {
Schema: BaseOauthUserAuthorization.OpSchema & {
user: User["Schema"];
application: OauthApplication["Schema"];
token: OauthToken["Schema"];
code?: OauthAuthorizationCode["Schema"];
token?: OauthToken["Schema"];
};
Projection: BaseOauthUserAuthorization.OpProjection & {
user?: User["Projection"];
application?: OauthApplication["Projection"];
code?: OauthAuthorizationCode["Projection"];
token?: OauthToken["Projection"];
};
FilterUnit: BaseOauthUserAuthorization.OpFilter & {
user: MakeFilter<User["FilterUnit"]>;
application: MakeFilter<OauthApplication["FilterUnit"]>;
code: MakeFilter<OauthAuthorizationCode["FilterUnit"]>;
token: MakeFilter<OauthToken["FilterUnit"]>;
};
Filter: MakeFilter<OauthUserAuthorization["FilterUnit"]>;
SortAttr: Partial<BaseOauthUserAuthorization.OpSortAttr | {
user: User["SortAttr"];
application: OauthApplication["SortAttr"];
code: OauthAuthorizationCode["SortAttr"];
token: OauthToken["SortAttr"];
}>;
SortNode: {
@ -2537,6 +2552,7 @@ export type OauthUserAuthorization = {
CreateOperationData: FormCreateData<BaseOauthUserAuthorization.OpSchema & {
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]>;
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]>;
code?: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]> | OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"]>;
token?: OakOperation<"create", OauthToken["CreateOperationData"]> | OakOperation<BaseOauthToken.OpUpdateAction, OauthToken["UpdateOperationData"], OauthToken["Filter"]>;
}>;
CreateSingle: OakOperation<"create", OauthUserAuthorization["CreateOperationData"]>;
@ -2545,6 +2561,7 @@ export type OauthUserAuthorization = {
UpdateOperationData: FormUpdateData<BaseOauthUserAuthorization.OpSchema & {
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]> | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>;
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]> | OakOperation<"remove", OauthApplication["RemoveOperationData"], OauthApplication["Filter"]>;
code?: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]> | OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"]> | OakOperation<"remove", OauthAuthorizationCode["RemoveOperationData"], OauthAuthorizationCode["Filter"]>;
token?: OakOperation<"create", OauthToken["CreateOperationData"]> | OakOperation<BaseOauthToken.OpUpdateAction, OauthToken["UpdateOperationData"], OauthToken["Filter"]> | OakOperation<"remove", OauthToken["RemoveOperationData"], OauthToken["Filter"]>;
}>;
Update: OakOperation<BaseOauthUserAuthorization.OpUpdateAction, OauthUserAuthorization["UpdateOperationData"], OauthUserAuthorization["Filter"], OauthUserAuthorization["Sorter"]>;

View File

@ -1,7 +1,8 @@
import { AbleState, AbleAction } from "oak-domain/lib/actions/action";
import { ActionDef } from "oak-domain/lib/types/Action";
import { GenericAction } from "oak-domain/lib/actions/action";
export type ParticularAction = AbleAction;
export type SecretAction = 'resetSecret' | string;
export type ParticularAction = AbleAction | SecretAction;
export declare const actions: string[];
export declare const AbleActionDef: ActionDef<AbleAction, AbleState>;
export type Action = GenericAction | ParticularAction | string;

View File

@ -1,5 +1,5 @@
import { makeAbleActionDef } from "oak-domain/lib/actions/action";
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "enable", "disable"];
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "enable", "disable", "resetSecret"];
export const AbleActionDef = makeAbleActionDef('enabled');
export const actionDefDict = {
ableState: AbleActionDef

View File

@ -13,7 +13,8 @@
},
"action": {
"enable": "启用",
"disable": "禁用"
"disable": "禁用",
"resetSecret": "重置密钥"
},
"v": {
"ableState": {

View File

@ -0,0 +1,11 @@
import { ActionDef } from "oak-domain/lib/types/Action";
import { GenericAction } from "oak-domain/lib/actions/action";
export type UsageState = 'granted' | 'denied' | 'revoked' | string;
export type UsageAction = 'revoke' | string;
export type ParticularAction = UsageAction;
export declare const actions: string[];
export declare const UsageActionDef: ActionDef<UsageAction, UsageState>;
export type Action = GenericAction | ParticularAction | string;
export declare const actionDefDict: {
usageState: ActionDef<string, string>;
};

View File

@ -0,0 +1,9 @@
export const actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "revoke"];
export const UsageActionDef = {
stm: {
revoke: ['granted', "revoked"]
}
};
export const actionDefDict = {
usageState: UsageActionDef
};

View File

@ -1,4 +1,4 @@
import { genericActions as actions } from "oak-domain/lib/actions/action";
import { actions } from "./Action";
export const desc = {
attributes: {
userId: {
@ -15,10 +15,17 @@ export const desc = {
notNull: true,
type: "datetime"
},
codeId: {
type: "ref",
ref: "oauthAuthorizationCode"
},
tokenId: {
notNull: true,
type: "ref",
ref: "oauthToken"
},
usageState: {
type: "enum",
enumeration: ["granted", "denied", "revoked"]
}
},
actionType: "crud",

View File

@ -0,0 +1,3 @@
import { Action, OpSchema } from "./Schema";
import { StyleDef } from "oak-domain/lib/types/Style";
export declare const style: StyleDef<OpSchema, Action>;

View File

@ -0,0 +1,12 @@
export const style = {
icon: {
revoke: 'fa-user-slash',
},
color: {
usageState: {
granted: '#28a745',
denied: '#dc3545',
revoked: '#6c757d',
}
}
};

View File

@ -1,13 +1,15 @@
import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, Q_NumberValue, Q_StringValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
import { Q_DateValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity";
import { GenericAction } from "oak-domain/lib/actions/action";
import { Action, ParticularAction, UsageState } from "./Action";
import { Datetime } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
userId: ForeignKey<"user">;
applicationId: ForeignKey<"oauthApplication">;
authorizedAt: Datetime;
tokenId: ForeignKey<"oauthToken">;
codeId?: ForeignKey<"oauthAuthorizationCode"> | null;
tokenId?: ForeignKey<"oauthToken"> | null;
usageState?: UsageState | null;
} & {
[A in ExpressionKey]?: any;
};
@ -20,7 +22,9 @@ export type OpFilter = {
userId: Q_StringValue;
applicationId: Q_StringValue;
authorizedAt: Q_DateValue;
codeId: Q_StringValue;
tokenId: Q_StringValue;
usageState: Q_EnumValue<UsageState>;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
"#id"?: NodeId;
@ -32,7 +36,9 @@ export type OpProjection = {
userId?: number;
applicationId?: number;
authorizedAt?: number;
codeId?: number;
tokenId?: number;
usageState?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{
id: number;
@ -42,8 +48,10 @@ export type OpSortAttr = Partial<{
userId: number;
applicationId: number;
authorizedAt: number;
codeId: number;
tokenId: number;
usageState: number;
[k: string]: any;
} | ExprOp<OpAttr | string>>;
export type OpAction = OakMakeAction<GenericAction | string>;
export type OpUpdateAction = "update" | string;
export type OpAction = OakMakeAction<Action | string>;
export type OpUpdateAction = "update" | ParticularAction | string;

View File

@ -4,6 +4,18 @@
"user": "用户",
"application": "Oauth应用",
"authorizedAt": "首次授权时间",
"token": "关联的令牌"
"token": "关联的令牌",
"code": "授权码",
"usageState": "授权状态"
},
"action": {
"revoke": "撤销授权"
},
"v": {
"usageState": {
"granted": "已授权",
"denied": "未授权",
"revoked": "已撤销"
}
}
}

View File

@ -15,6 +15,7 @@ import { style as mobile } from "./Mobile/Style";
import { style as notification } from "./Notification/Style";
import { style as oauthApplication } from "./OauthApplication/Style";
import { style as oauthProvider } from "./OauthProvider/Style";
import { style as oauthUserAuthorization } from "./OauthUserAuthorization/Style";
import { style as parasite } from "./Parasite/Style";
import { style as passport } from "./Passport/Style";
import { style as smsTemplate } from "./SmsTemplate/Style";
@ -46,6 +47,7 @@ export const styleDict = {
notification,
oauthApplication,
oauthProvider,
oauthUserAuthorization,
parasite,
passport,
smsTemplate,

View File

@ -15,7 +15,8 @@ export interface Schema extends EntityShape {
isConfidential: Boolean;
scopes?: StringListJson;
}
export type Action = AbleAction;
export type SecretAction = 'resetSecret';
export type Action = AbleAction | SecretAction;
export declare const AbleActionDef: ActionDef<AbleAction, AbleState>;
export declare const entityDesc: EntityDesc<Schema, Action, '', {
ableState: AbleState;

View File

@ -23,6 +23,7 @@ exports.entityDesc = {
action: {
enable: '启用',
disable: '禁用',
resetSecret: '重置密钥',
},
v: {
ableState: {

View File

@ -1,13 +1,22 @@
import { Datetime } from 'oak-domain/lib/types/DataType';
import { Schema as User } from './User';
import { EntityShape } from 'oak-domain/lib/types/Entity';
import { ActionDef } from 'oak-domain/lib/types';
import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
import { Schema as OauthApplication } from './OauthApplication';
import { Schema as OauthToken } from './OauthToken';
import { Schema as OauthAuthorizationCode } from './OauthAuthorizationCode';
export interface Schema extends EntityShape {
user: User;
application: OauthApplication;
authorizedAt: Datetime;
token: OauthToken;
code?: OauthAuthorizationCode;
token?: OauthToken;
}
export declare const entityDesc: EntityDesc<Schema, '', '', {}>;
export type UsageState = 'granted' | 'denied' | 'revoked';
export type UsageAction = 'revoke';
export type Action = UsageAction;
export declare const UsageActionDef: ActionDef<UsageAction, UsageState>;
export declare const entityDesc: EntityDesc<Schema, Action, '', {
usageState: UsageState;
}>;

View File

@ -1,7 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.entityDesc = void 0;
exports.entityDesc = exports.UsageActionDef = void 0;
;
exports.UsageActionDef = {
stm: {
revoke: ['granted', "revoked"]
}
};
exports.entityDesc = {
locales: {
zh_CN: {
@ -12,7 +17,31 @@ exports.entityDesc = {
application: 'Oauth应用',
authorizedAt: '首次授权时间',
token: '关联的令牌',
code: '授权码',
usageState: '授权状态',
},
action: {
revoke: '撤销授权',
},
v: {
usageState: {
granted: '已授权',
denied: '未授权',
revoked: '已撤销',
}
}
},
},
style: {
icon: {
revoke: 'fa-user-slash',
},
color: {
usageState: {
granted: '#28a745',
denied: '#dc3545',
revoked: '#6c757d',
}
}
}
};

View File

@ -31,6 +31,9 @@ export declare const actionDefDict: {
oauthProvider: {
ableState: import("oak-domain/lib/types").ActionDef<import("oak-domain/lib/actions/action").AbleAction, import("oak-domain/lib/actions/action").AbleState>;
};
oauthUserAuthorization: {
usageState: import("oak-domain/lib/types").ActionDef<string, string>;
};
parasite: {};
toDo: {
iState: import("oak-domain/lib/types").ActionDef<string, string>;

View File

@ -12,15 +12,16 @@ const Action_8 = require("./Mobile/Action");
const Action_9 = require("./Notification/Action");
const Action_10 = require("./OauthApplication/Action");
const Action_11 = require("./OauthProvider/Action");
const Action_12 = require("./Parasite/Action");
const Action_13 = require("./ToDo/Action");
const Action_14 = require("./Token/Action");
const Action_15 = require("./User/Action");
const Action_16 = require("./UserEntityGrant/Action");
const Action_17 = require("./UserWechatPublicTag/Action");
const Action_18 = require("./WechatLogin/Action");
const Action_19 = require("./WechatMenu/Action");
const Action_20 = require("./WechatPublicTag/Action");
const Action_12 = require("./OauthUserAuthorization/Action");
const Action_13 = require("./Parasite/Action");
const Action_14 = require("./ToDo/Action");
const Action_15 = require("./Token/Action");
const Action_16 = require("./User/Action");
const Action_17 = require("./UserEntityGrant/Action");
const Action_18 = require("./UserWechatPublicTag/Action");
const Action_19 = require("./WechatLogin/Action");
const Action_20 = require("./WechatMenu/Action");
const Action_21 = require("./WechatPublicTag/Action");
exports.actionDefDict = {
log: Action_1.actionDefDict,
modi: Action_2.actionDefDict,
@ -33,13 +34,14 @@ exports.actionDefDict = {
notification: Action_9.actionDefDict,
oauthApplication: Action_10.actionDefDict,
oauthProvider: Action_11.actionDefDict,
parasite: Action_12.actionDefDict,
toDo: Action_13.actionDefDict,
token: Action_14.actionDefDict,
user: Action_15.actionDefDict,
userEntityGrant: Action_16.actionDefDict,
userWechatPublicTag: Action_17.actionDefDict,
wechatLogin: Action_18.actionDefDict,
wechatMenu: Action_19.actionDefDict,
wechatPublicTag: Action_20.actionDefDict
oauthUserAuthorization: Action_12.actionDefDict,
parasite: Action_13.actionDefDict,
toDo: Action_14.actionDefDict,
token: Action_15.actionDefDict,
user: Action_16.actionDefDict,
userEntityGrant: Action_17.actionDefDict,
userWechatPublicTag: Action_18.actionDefDict,
wechatLogin: Action_19.actionDefDict,
wechatMenu: Action_20.actionDefDict,
wechatPublicTag: Action_21.actionDefDict
};

View File

@ -2223,7 +2223,9 @@ export type OauthAuthorizationCode = {
application: OauthApplication["Schema"];
user: User["Schema"];
oauthToken$code?: Array<Omit<OauthToken["Schema"], "code">>;
oauthUserAuthorization$code?: Array<Omit<OauthUserAuthorization["Schema"], "code">>;
oauthToken$code$$aggr?: AggregationResult<Omit<OauthToken["Schema"], "code">>;
oauthUserAuthorization$code$$aggr?: AggregationResult<Omit<OauthUserAuthorization["Schema"], "code">>;
};
Projection: BaseOauthAuthorizationCode.OpProjection & {
application?: OauthApplication["Projection"];
@ -2234,11 +2236,18 @@ export type OauthAuthorizationCode = {
oauthToken$code$$aggr?: DeduceAggregation<Omit<OauthToken["Projection"], "oauthAuthorizationCode">, Omit<OauthToken["Filter"], "oauthAuthorizationCode">, OauthToken["Sorter"]> & {
$entity: "oauthToken";
};
oauthUserAuthorization$code?: OakSelection<"select", Omit<OauthUserAuthorization["Projection"], "oauthAuthorizationCode">, Omit<OauthUserAuthorization["Filter"], "oauthAuthorizationCode">, OauthUserAuthorization["Sorter"]> & {
$entity: "oauthUserAuthorization";
};
oauthUserAuthorization$code$$aggr?: DeduceAggregation<Omit<OauthUserAuthorization["Projection"], "oauthAuthorizationCode">, Omit<OauthUserAuthorization["Filter"], "oauthAuthorizationCode">, OauthUserAuthorization["Sorter"]> & {
$entity: "oauthUserAuthorization";
};
};
FilterUnit: BaseOauthAuthorizationCode.OpFilter & {
application: MakeFilter<OauthApplication["FilterUnit"]>;
user: MakeFilter<User["FilterUnit"]>;
oauthToken$code: MakeFilter<Omit<OauthToken["FilterUnit"], "code">> & SubQueryPredicateMetadata;
oauthUserAuthorization$code: MakeFilter<Omit<OauthUserAuthorization["FilterUnit"], "code">> & SubQueryPredicateMetadata;
};
Filter: MakeFilter<OauthAuthorizationCode["FilterUnit"]>;
SortAttr: Partial<BaseOauthAuthorizationCode.OpSortAttr | {
@ -2256,6 +2265,7 @@ export type OauthAuthorizationCode = {
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]>;
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]>;
oauthToken$code?: (OakOperation<"create", Omit<OauthToken["CreateOperationData"], "code"> | Omit<OauthToken["CreateOperationData"], "code">[]> | OakOperation<BaseOauthToken.OpUpdateAction, Omit<OauthToken["UpdateOperationData"], "code">, OauthToken["Filter"]>)[];
oauthUserAuthorization$code?: (OakOperation<"create", Omit<OauthUserAuthorization["CreateOperationData"], "code"> | Omit<OauthUserAuthorization["CreateOperationData"], "code">[]> | OakOperation<BaseOauthUserAuthorization.OpUpdateAction, Omit<OauthUserAuthorization["UpdateOperationData"], "code">, OauthUserAuthorization["Filter"]>)[];
}>;
CreateSingle: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]>;
CreateMulti: OakOperation<"create", Array<OauthAuthorizationCode["CreateOperationData"]>>;
@ -2264,6 +2274,7 @@ export type OauthAuthorizationCode = {
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]> | OakOperation<"remove", OauthApplication["RemoveOperationData"], OauthApplication["Filter"]>;
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]> | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>;
oauthToken$code?: (OakOperation<"create", Omit<OauthToken["CreateOperationData"], "code"> | Omit<OauthToken["CreateOperationData"], "code">[]> | OakOperation<BaseOauthToken.OpUpdateAction, Omit<OauthToken["UpdateOperationData"], "code">, OauthToken["Filter"]> | OakOperation<"remove", OauthToken["RemoveOperationData"], OauthToken["Filter"]>)[];
oauthUserAuthorization$code?: (OakOperation<"create", Omit<OauthUserAuthorization["CreateOperationData"], "code"> | Omit<OauthUserAuthorization["CreateOperationData"], "code">[]> | OakOperation<BaseOauthUserAuthorization.OpUpdateAction, Omit<OauthUserAuthorization["UpdateOperationData"], "code">, OauthUserAuthorization["Filter"]> | OakOperation<"remove", OauthUserAuthorization["RemoveOperationData"], OauthUserAuthorization["Filter"]>)[];
}>;
Update: OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"], OauthAuthorizationCode["Sorter"]>;
RemoveOperationData: {};
@ -2509,22 +2520,26 @@ export type OauthUserAuthorization = {
Schema: BaseOauthUserAuthorization.OpSchema & {
user: User["Schema"];
application: OauthApplication["Schema"];
token: OauthToken["Schema"];
code?: OauthAuthorizationCode["Schema"];
token?: OauthToken["Schema"];
};
Projection: BaseOauthUserAuthorization.OpProjection & {
user?: User["Projection"];
application?: OauthApplication["Projection"];
code?: OauthAuthorizationCode["Projection"];
token?: OauthToken["Projection"];
};
FilterUnit: BaseOauthUserAuthorization.OpFilter & {
user: MakeFilter<User["FilterUnit"]>;
application: MakeFilter<OauthApplication["FilterUnit"]>;
code: MakeFilter<OauthAuthorizationCode["FilterUnit"]>;
token: MakeFilter<OauthToken["FilterUnit"]>;
};
Filter: MakeFilter<OauthUserAuthorization["FilterUnit"]>;
SortAttr: Partial<BaseOauthUserAuthorization.OpSortAttr | {
user: User["SortAttr"];
application: OauthApplication["SortAttr"];
code: OauthAuthorizationCode["SortAttr"];
token: OauthToken["SortAttr"];
}>;
SortNode: {
@ -2537,6 +2552,7 @@ export type OauthUserAuthorization = {
CreateOperationData: FormCreateData<BaseOauthUserAuthorization.OpSchema & {
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]>;
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]>;
code?: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]> | OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"]>;
token?: OakOperation<"create", OauthToken["CreateOperationData"]> | OakOperation<BaseOauthToken.OpUpdateAction, OauthToken["UpdateOperationData"], OauthToken["Filter"]>;
}>;
CreateSingle: OakOperation<"create", OauthUserAuthorization["CreateOperationData"]>;
@ -2545,6 +2561,7 @@ export type OauthUserAuthorization = {
UpdateOperationData: FormUpdateData<BaseOauthUserAuthorization.OpSchema & {
user?: OakOperation<"create", User["CreateOperationData"]> | OakOperation<BaseUser.OpUpdateAction, User["UpdateOperationData"], User["Filter"]> | OakOperation<"remove", User["RemoveOperationData"], User["Filter"]>;
application?: OakOperation<"create", OauthApplication["CreateOperationData"]> | OakOperation<BaseOauthApplication.OpUpdateAction, OauthApplication["UpdateOperationData"], OauthApplication["Filter"]> | OakOperation<"remove", OauthApplication["RemoveOperationData"], OauthApplication["Filter"]>;
code?: OakOperation<"create", OauthAuthorizationCode["CreateOperationData"]> | OakOperation<BaseOauthAuthorizationCode.OpUpdateAction, OauthAuthorizationCode["UpdateOperationData"], OauthAuthorizationCode["Filter"]> | OakOperation<"remove", OauthAuthorizationCode["RemoveOperationData"], OauthAuthorizationCode["Filter"]>;
token?: OakOperation<"create", OauthToken["CreateOperationData"]> | OakOperation<BaseOauthToken.OpUpdateAction, OauthToken["UpdateOperationData"], OauthToken["Filter"]> | OakOperation<"remove", OauthToken["RemoveOperationData"], OauthToken["Filter"]>;
}>;
Update: OakOperation<BaseOauthUserAuthorization.OpUpdateAction, OauthUserAuthorization["UpdateOperationData"], OauthUserAuthorization["Filter"], OauthUserAuthorization["Sorter"]>;

View File

@ -1,7 +1,8 @@
import { AbleState, AbleAction } from "oak-domain/lib/actions/action";
import { ActionDef } from "oak-domain/lib/types/Action";
import { GenericAction } from "oak-domain/lib/actions/action";
export type ParticularAction = AbleAction;
export type SecretAction = 'resetSecret' | string;
export type ParticularAction = AbleAction | SecretAction;
export declare const actions: string[];
export declare const AbleActionDef: ActionDef<AbleAction, AbleState>;
export type Action = GenericAction | ParticularAction | string;

View File

@ -2,7 +2,7 @@
Object.defineProperty(exports, "__esModule", { value: true });
exports.actionDefDict = exports.AbleActionDef = exports.actions = void 0;
const action_1 = require("oak-domain/lib/actions/action");
exports.actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "enable", "disable"];
exports.actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "enable", "disable", "resetSecret"];
exports.AbleActionDef = (0, action_1.makeAbleActionDef)('enabled');
exports.actionDefDict = {
ableState: exports.AbleActionDef

View File

@ -13,7 +13,8 @@
},
"action": {
"enable": "启用",
"disable": "禁用"
"disable": "禁用",
"resetSecret": "重置密钥"
},
"v": {
"ableState": {

View File

@ -0,0 +1,11 @@
import { ActionDef } from "oak-domain/lib/types/Action";
import { GenericAction } from "oak-domain/lib/actions/action";
export type UsageState = 'granted' | 'denied' | 'revoked' | string;
export type UsageAction = 'revoke' | string;
export type ParticularAction = UsageAction;
export declare const actions: string[];
export declare const UsageActionDef: ActionDef<UsageAction, UsageState>;
export type Action = GenericAction | ParticularAction | string;
export declare const actionDefDict: {
usageState: ActionDef<string, string>;
};

View File

@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.actionDefDict = exports.UsageActionDef = exports.actions = void 0;
exports.actions = ["count", "stat", "download", "select", "aggregate", "create", "remove", "update", "revoke"];
exports.UsageActionDef = {
stm: {
revoke: ['granted', "revoked"]
}
};
exports.actionDefDict = {
usageState: exports.UsageActionDef
};

View File

@ -1,7 +1,7 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.desc = void 0;
const action_1 = require("oak-domain/lib/actions/action");
const Action_1 = require("./Action");
exports.desc = {
attributes: {
userId: {
@ -18,12 +18,19 @@ exports.desc = {
notNull: true,
type: "datetime"
},
codeId: {
type: "ref",
ref: "oauthAuthorizationCode"
},
tokenId: {
notNull: true,
type: "ref",
ref: "oauthToken"
},
usageState: {
type: "enum",
enumeration: ["granted", "denied", "revoked"]
}
},
actionType: "crud",
actions: action_1.genericActions
actions: Action_1.actions
};

View File

@ -0,0 +1,3 @@
import { Action, OpSchema } from "./Schema";
import { StyleDef } from "oak-domain/lib/types/Style";
export declare const style: StyleDef<OpSchema, Action>;

View File

@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.style = void 0;
exports.style = {
icon: {
revoke: 'fa-user-slash',
},
color: {
usageState: {
granted: '#28a745',
denied: '#dc3545',
revoked: '#6c757d',
}
}
};

View File

@ -1,13 +1,15 @@
import { ForeignKey } from "oak-domain/lib/types/DataType";
import { Q_DateValue, Q_NumberValue, Q_StringValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
import { Q_DateValue, Q_NumberValue, Q_StringValue, Q_EnumValue, NodeId, ExprOp, ExpressionKey } from "oak-domain/lib/types/Demand";
import { MakeAction as OakMakeAction, EntityShape } from "oak-domain/lib/types/Entity";
import { GenericAction } from "oak-domain/lib/actions/action";
import { Action, ParticularAction, UsageState } from "./Action";
import { Datetime } from "oak-domain/lib/types/DataType";
export type OpSchema = EntityShape & {
userId: ForeignKey<"user">;
applicationId: ForeignKey<"oauthApplication">;
authorizedAt: Datetime;
tokenId: ForeignKey<"oauthToken">;
codeId?: ForeignKey<"oauthAuthorizationCode"> | null;
tokenId?: ForeignKey<"oauthToken"> | null;
usageState?: UsageState | null;
} & {
[A in ExpressionKey]?: any;
};
@ -20,7 +22,9 @@ export type OpFilter = {
userId: Q_StringValue;
applicationId: Q_StringValue;
authorizedAt: Q_DateValue;
codeId: Q_StringValue;
tokenId: Q_StringValue;
usageState: Q_EnumValue<UsageState>;
} & ExprOp<OpAttr | string>;
export type OpProjection = {
"#id"?: NodeId;
@ -32,7 +36,9 @@ export type OpProjection = {
userId?: number;
applicationId?: number;
authorizedAt?: number;
codeId?: number;
tokenId?: number;
usageState?: number;
} & Partial<ExprOp<OpAttr | string>>;
export type OpSortAttr = Partial<{
id: number;
@ -42,8 +48,10 @@ export type OpSortAttr = Partial<{
userId: number;
applicationId: number;
authorizedAt: number;
codeId: number;
tokenId: number;
usageState: number;
[k: string]: any;
} | ExprOp<OpAttr | string>>;
export type OpAction = OakMakeAction<GenericAction | string>;
export type OpUpdateAction = "update" | string;
export type OpAction = OakMakeAction<Action | string>;
export type OpUpdateAction = "update" | ParticularAction | string;

View File

@ -4,6 +4,18 @@
"user": "用户",
"application": "Oauth应用",
"authorizedAt": "首次授权时间",
"token": "关联的令牌"
"token": "关联的令牌",
"code": "授权码",
"usageState": "授权状态"
},
"action": {
"revoke": "撤销授权"
},
"v": {
"usageState": {
"granted": "已授权",
"denied": "未授权",
"revoked": "已撤销"
}
}
}

View File

@ -18,19 +18,20 @@ const Style_14 = require("./Mobile/Style");
const Style_15 = require("./Notification/Style");
const Style_16 = require("./OauthApplication/Style");
const Style_17 = require("./OauthProvider/Style");
const Style_18 = require("./Parasite/Style");
const Style_19 = require("./Passport/Style");
const Style_20 = require("./SmsTemplate/Style");
const Style_21 = require("./ToDo/Style");
const Style_22 = require("./Token/Style");
const Style_23 = require("./User/Style");
const Style_24 = require("./UserEntityGrant/Style");
const Style_25 = require("./UserWechatPublicTag/Style");
const Style_26 = require("./WechatLogin/Style");
const Style_27 = require("./WechatMenu/Style");
const Style_28 = require("./WechatPublicTag/Style");
const Style_29 = require("./WechatQrCode/Style");
const Style_30 = require("./WechatUser/Style");
const Style_18 = require("./OauthUserAuthorization/Style");
const Style_19 = require("./Parasite/Style");
const Style_20 = require("./Passport/Style");
const Style_21 = require("./SmsTemplate/Style");
const Style_22 = require("./ToDo/Style");
const Style_23 = require("./Token/Style");
const Style_24 = require("./User/Style");
const Style_25 = require("./UserEntityGrant/Style");
const Style_26 = require("./UserWechatPublicTag/Style");
const Style_27 = require("./WechatLogin/Style");
const Style_28 = require("./WechatMenu/Style");
const Style_29 = require("./WechatPublicTag/Style");
const Style_30 = require("./WechatQrCode/Style");
const Style_31 = require("./WechatUser/Style");
exports.styleDict = {
log: Style_1.style,
modi: Style_2.style,
@ -49,17 +50,18 @@ exports.styleDict = {
notification: Style_15.style,
oauthApplication: Style_16.style,
oauthProvider: Style_17.style,
parasite: Style_18.style,
passport: Style_19.style,
smsTemplate: Style_20.style,
toDo: Style_21.style,
token: Style_22.style,
user: Style_23.style,
userEntityGrant: Style_24.style,
userWechatPublicTag: Style_25.style,
wechatLogin: Style_26.style,
wechatMenu: Style_27.style,
wechatPublicTag: Style_28.style,
wechatQrCode: Style_29.style,
wechatUser: Style_30.style
oauthUserAuthorization: Style_18.style,
parasite: Style_19.style,
passport: Style_20.style,
smsTemplate: Style_21.style,
toDo: Style_22.style,
token: Style_23.style,
user: Style_24.style,
userEntityGrant: Style_25.style,
userWechatPublicTag: Style_26.style,
wechatLogin: Style_27.style,
wechatMenu: Style_28.style,
wechatPublicTag: Style_29.style,
wechatQrCode: Style_30.style,
wechatUser: Style_31.style
};

View File

@ -22,7 +22,8 @@ export interface Schema extends EntityShape {
scopes?: StringListJson;
};
export type Action = AbleAction;
export type SecretAction = 'resetSecret';
export type Action = AbleAction | SecretAction;
export const AbleActionDef: ActionDef<AbleAction, AbleState> = makeAbleActionDef('enabled');
export const entityDesc: EntityDesc<Schema, Action, '', {
@ -46,6 +47,7 @@ export const entityDesc: EntityDesc<Schema, Action, '', {
action: {
enable: '启用',
disable: '禁用',
resetSecret: '重置密钥',
},
v: {
ableState: {

View File

@ -8,6 +8,7 @@ import { EntityDesc } from 'oak-domain/lib/types/EntityDesc';
import { Schema as System } from './System';
import { Schema as OauthApplication } from './OauthApplication';
import { Schema as OauthToken } from './OauthToken';
import { Schema as OauthAuthorizationCode } from './OauthAuthorizationCode';
// oauth 提供方用户授权记录
// 用户授权记录表 OAuth Authorization Records
@ -15,11 +16,23 @@ export interface Schema extends EntityShape {
user: User;
application: OauthApplication;
authorizedAt: Datetime; // 用户首次授权时间
token: OauthToken; // 关联的令牌
code?: OauthAuthorizationCode; // 使用的授权码
token?: OauthToken; // 关联的令牌(在调用接口之后生成)
};
export const entityDesc: EntityDesc<Schema, '', '', {
}> = {
export type UsageState = 'granted' | 'denied' | 'revoked';
export type UsageAction = 'revoke';
export type Action = UsageAction;
export const UsageActionDef: ActionDef<UsageAction, UsageState> = {
stm: {
revoke: ['granted', "revoked"]
}
};
export const entityDesc: EntityDesc<Schema, Action, '', {
usageState: UsageState;
}> = {
locales: {
zh_CN: {
// 用户可以查看和管理已授权的应用
@ -29,8 +42,32 @@ export const entityDesc: EntityDesc<Schema, '', '', {
application: 'Oauth应用',
authorizedAt: '首次授权时间',
token: '关联的令牌',
code: '授权码',
usageState: '授权状态',
},
action: {
revoke: '撤销授权',
},
v: {
usageState: {
granted: '已授权',
denied: '未授权',
revoked: '已撤销',
}
}
},
},
style: {
icon: {
revoke: 'fa-user-slash',
},
color: {
usageState: {
granted: '#28a745',
denied: '#dc3545',
revoked: '#6c757d',
}
}
}
};