checker中类型为relation,row的支持silent
This commit is contained in:
parent
1328e256f5
commit
80c07f12da
|
|
@ -33,7 +33,7 @@ var TriggerExecutor = /** @class */ (function () {
|
|||
TriggerExecutor.prototype.registerChecker = function (checker) {
|
||||
var entity = checker.entity, action = checker.action, type = checker.type, conditionalFilter = checker.conditionalFilter;
|
||||
var triggerName = "".concat(String(entity)).concat(action, "\u6743\u9650\u68C0\u67E5-").concat(this.counter++);
|
||||
var _a = (0, checker_1.translateCheckerInAsyncContext)(checker), fn = _a.fn, when = _a.when;
|
||||
var _a = (0, checker_1.translateCheckerInAsyncContext)(checker, true), fn = _a.fn, when = _a.when;
|
||||
var priority = type === 'data' ? Trigger_1.DATA_CHECKER_DEFAULT_PRIORITY : Trigger_1.CHECKER_DEFAULT_PRIORITY; // checker的默认优先级最低(前面的trigger可能会赋上一些相应的值)
|
||||
var trigger = {
|
||||
checkerType: type,
|
||||
|
|
|
|||
|
|
@ -2,7 +2,13 @@ import { AuthDefDict, Checker, EntityDict, OperateOption, SelectOption, StorageS
|
|||
import { EntityDict as BaseEntityDict } from '../base-app-domain';
|
||||
import { AsyncContext } from "./AsyncRowStore";
|
||||
import { SyncContext } from './SyncRowStore';
|
||||
export declare function translateCheckerInAsyncContext<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>>(checker: Checker<ED, T, Cxt>): {
|
||||
/**
|
||||
*
|
||||
* @param checker 要翻译的checker
|
||||
* @param silent 如果silent,则row和relation类型的checker只会把限制条件加到查询上,而不报错(除掉create动作)
|
||||
* @returns
|
||||
*/
|
||||
export declare function translateCheckerInAsyncContext<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>>(checker: Checker<ED, T, Cxt>, silent?: boolean): {
|
||||
fn: Trigger<ED, T, Cxt>['fn'];
|
||||
when: 'before' | 'after';
|
||||
};
|
||||
|
|
|
|||
|
|
@ -11,7 +11,13 @@ var string_1 = require("../utils/string");
|
|||
var lodash_1 = require("../utils/lodash");
|
||||
var relation_1 = require("./relation");
|
||||
var uuid_1 = require("../utils/uuid");
|
||||
function translateCheckerInAsyncContext(checker) {
|
||||
/**
|
||||
*
|
||||
* @param checker 要翻译的checker
|
||||
* @param silent 如果silent,则row和relation类型的checker只会把限制条件加到查询上,而不报错(除掉create动作)
|
||||
* @returns
|
||||
*/
|
||||
function translateCheckerInAsyncContext(checker, silent) {
|
||||
var _this = this;
|
||||
var entity = checker.entity, type = checker.type;
|
||||
var when = 'before'; // 现在create的relation改成提前的expression检查了,原先是先插入再后检查,性能不行,而且select也需要实现前检查
|
||||
|
|
@ -59,7 +65,7 @@ function translateCheckerInAsyncContext(checker) {
|
|||
_c.label = 3;
|
||||
case 3:
|
||||
filter2 = _b;
|
||||
if (!['select', 'count', 'stat'].includes(action)) return [3 /*break*/, 4];
|
||||
if (!silent) return [3 /*break*/, 4];
|
||||
operation.filter = (0, filter_1.addFilterSegment)(operationFilter || {}, filter2);
|
||||
return [2 /*return*/, 0];
|
||||
case 4: return [4 /*yield*/, (0, filter_1.checkFilterContains)(entity, context, filter2, operationFilter || {}, true)];
|
||||
|
|
@ -129,6 +135,10 @@ function translateCheckerInAsyncContext(checker) {
|
|||
console.warn("".concat(entity, "\u5BF9\u8C61\u7684create\u7C7B\u578B\u7684checker\u4E2D\uFF0C\u5B58\u5728\u65E0\u6CD5\u8F6C\u6362\u4E3A\u8868\u8FBE\u5F0F\u5F62\u5F0F\u7684\u60C5\u51B5\uFF0C\u8BF7\u5C3D\u91CF\u4F7F\u7528authDef\u683C\u5F0F\u5B9A\u4E49\u8FD9\u7C7Bchecker"));
|
||||
return [2 /*return*/, 0];
|
||||
}
|
||||
if (silent) {
|
||||
operation.filter = (0, filter_1.addFilterSegment)(filter || {}, result);
|
||||
return [2 /*return*/, 0];
|
||||
}
|
||||
(0, assert_1.default)(filter);
|
||||
return [4 /*yield*/, (0, filter_1.checkFilterContains)(entity, context, result, filter, true)];
|
||||
case 4:
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ export class TriggerExecutor<ED extends EntityDict & BaseEntityDict> {
|
|||
registerChecker<T extends keyof ED, Cxt extends AsyncContext<ED>>(checker: Checker<ED, T, Cxt>): void {
|
||||
const { entity, action, type, conditionalFilter } = checker;
|
||||
const triggerName = `${String(entity)}${action}权限检查-${this.counter++}`;
|
||||
const { fn, when } = translateCheckerInAsyncContext(checker);
|
||||
const { fn, when } = translateCheckerInAsyncContext(checker, true);
|
||||
const priority = type === 'data' ? DATA_CHECKER_DEFAULT_PRIORITY : CHECKER_DEFAULT_PRIORITY; // checker的默认优先级最低(前面的trigger可能会赋上一些相应的值)
|
||||
const trigger = {
|
||||
checkerType: type,
|
||||
|
|
|
|||
|
|
@ -14,11 +14,17 @@ import { union, uniq, difference } from '../utils/lodash';
|
|||
import { judgeRelation } from './relation';
|
||||
import { generateNewId } from '../utils/uuid';
|
||||
|
||||
/**
|
||||
*
|
||||
* @param checker 要翻译的checker
|
||||
* @param silent 如果silent,则row和relation类型的checker只会把限制条件加到查询上,而不报错(除掉create动作)
|
||||
* @returns
|
||||
*/
|
||||
export function translateCheckerInAsyncContext<
|
||||
ED extends EntityDict & BaseEntityDict,
|
||||
T extends keyof ED,
|
||||
Cxt extends AsyncContext<ED>
|
||||
>(checker: Checker<ED, T, Cxt>): {
|
||||
>(checker: Checker<ED, T, Cxt>, silent?: boolean): {
|
||||
fn: Trigger<ED, T, Cxt>['fn'];
|
||||
when: 'before' | 'after';
|
||||
} {
|
||||
|
|
@ -42,7 +48,7 @@ export function translateCheckerInAsyncContext<
|
|||
const fn = (async ({ operation }, context, option) => {
|
||||
const { filter: operationFilter, action } = operation;
|
||||
const filter2 = typeof filter === 'function' ? await (filter as Function)(operation, context, option) : filter;
|
||||
if (['select', 'count', 'stat'].includes(action)) {
|
||||
if (silent) {
|
||||
operation.filter = addFilterSegment(operationFilter || {}, filter2);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -100,6 +106,10 @@ export function translateCheckerInAsyncContext<
|
|||
console.warn(`${entity as string}对象的create类型的checker中,存在无法转换为表达式形式的情况,请尽量使用authDef格式定义这类checker`);
|
||||
return 0;
|
||||
}
|
||||
if (silent) {
|
||||
operation.filter = addFilterSegment(filter || {}, result);
|
||||
return 0;
|
||||
}
|
||||
assert(filter);
|
||||
if (await checkFilterContains<ED, T, Cxt>(entity, context, result, filter, true)) {
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue