将getUserIdsByActions移到了domain中

This commit is contained in:
Xu Chang 2023-07-26 18:03:18 +08:00
parent a271f43d21
commit 6f3e01bffa
3 changed files with 125 additions and 1 deletions

View File

@ -102,3 +102,14 @@ export declare class RelationAuth<ED extends EntityDict & BaseEntityDict> {
*/
private checkActions2;
}
/**
* entity进行actions操作权限的用户Idroot
* @param params
* @param context
*/
export declare function getUserIdsByActions<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>>(params: {
entity: T;
entityId: string;
actions: ED[T]['Action'][];
overlap?: boolean;
}, context: Cxt): Promise<string[]>;

View File

@ -1,6 +1,6 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RelationAuth = void 0;
exports.getUserIdsByActions = exports.RelationAuth = void 0;
var tslib_1 = require("tslib");
var assert_1 = tslib_1.__importDefault(require("assert"));
var types_1 = require("../types");
@ -2059,3 +2059,62 @@ var RelationAuth = /** @class */ (function () {
return RelationAuth;
}());
exports.RelationAuth = RelationAuth;
;
/**
* 获取有对entity进行actions操作权限的用户Id不包含root
* @param params
* @param context
*/
function getUserIdsByActions(params, context) {
return tslib_1.__awaiter(this, void 0, void 0, function () {
var entity, entityId, actions, overlap, filter, actionAuths, userRelations;
return tslib_1.__generator(this, function (_a) {
switch (_a.label) {
case 0:
entity = params.entity, entityId = params.entityId, actions = params.actions, overlap = params.overlap;
filter = {
destEntity: entity,
relation: {
entity: entity,
entityId: entityId,
},
};
if (overlap) {
Object.assign(filter, {
deActions: {
$overlaps: actions,
},
});
}
else {
Object.assign(filter, {
deActions: {
$contains: actions,
},
});
}
return [4 /*yield*/, context.select('actionAuth', {
data: {
id: 1,
relation: {
id: 1,
userRelation$relation: {
$entity: 'userRelation',
data: {
id: 1,
userId: 1,
},
},
},
},
filter: filter,
}, { dontCollect: true })];
case 1:
actionAuths = _a.sent();
userRelations = actionAuths.map(function (ele) { return ele.relation.userRelation$relation; });
return [2 /*return*/, (0, lodash_1.uniq)(Array.prototype.concat.apply([], userRelations).map(function (ele) { return ele.userId; }))];
}
});
});
}
exports.getUserIdsByActions = getUserIdsByActions;

View File

@ -2493,4 +2493,58 @@ export class RelationAuth<ED extends EntityDict & BaseEntityDict>{
}
}
}
};
/**
* entity进行actions操作权限的用户Idroot
* @param params
* @param context
*/
export async function getUserIdsByActions<ED extends EntityDict & BaseEntityDict, T extends keyof ED, Cxt extends AsyncContext<ED>>(params: {
entity: T;
entityId: string;
actions: ED[T]['Action'][];
overlap?: boolean;
}, context: Cxt) {
const { entity, entityId, actions, overlap } = params;
const filter = {
destEntity: entity as string,
relation: {
entity: entity as string,
entityId,
},
};
if (overlap) {
Object.assign(filter, {
deActions: {
$overlaps: actions,
},
});
}
else {
Object.assign(filter, {
deActions: {
$contains: actions,
},
});
}
const actionAuths = await context.select('actionAuth', {
data: {
id: 1,
relation: {
id: 1,
userRelation$relation: {
$entity: 'userRelation',
data: {
id: 1,
userId: 1,
},
},
},
},
filter,
}, { dontCollect: true });
const userRelations = actionAuths.map(ele => ele.relation!.userRelation$relation!);
return uniq(Array.prototype.concat.apply([], userRelations).map(ele => ele.userId)) as string[];
}