@steedos/objectql 2.1.53 → 2.1.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/dynamic-load/trigger.d.ts +1 -3
- package/lib/dynamic-load/trigger.js +24 -14
- package/lib/dynamic-load/trigger.js.map +1 -1
- package/lib/formula/core.js +22 -5
- package/lib/formula/core.js.map +1 -1
- package/lib/formula/index.d.ts +2 -0
- package/lib/formula/index.js +28 -1
- package/lib/formula/index.js.map +1 -1
- package/lib/formula/simple_params.d.ts +2 -0
- package/lib/formula/simple_params.js +91 -0
- package/lib/formula/simple_params.js.map +1 -0
- package/lib/formula/type.d.ts +3 -2
- package/lib/formula/type.js.map +1 -1
- package/lib/ts-types/triggerActionParams.d.ts +1 -0
- package/lib/types/object.d.ts +5 -0
- package/lib/types/object.js +236 -73
- package/lib/types/object.js.map +1 -1
- package/lib/types/object_permission.d.ts +1 -0
- package/lib/types/object_permission.js +31 -0
- package/lib/types/object_permission.js.map +1 -1
- package/lib/types/trigger.d.ts +1 -0
- package/lib/types/trigger.js.map +1 -1
- package/lib/util/function_expression.d.ts +2 -0
- package/lib/util/function_expression.js +65 -0
- package/lib/util/function_expression.js.map +1 -0
- package/lib/util/index.d.ts +1 -0
- package/lib/util/index.js +1 -0
- package/lib/util/index.js.map +1 -1
- package/lib/util/transform.js +1 -1
- package/lib/util/transform.js.map +1 -1
- package/package.json +8 -8
- package/src/dynamic-load/trigger.ts +22 -15
- package/src/formula/core.ts +19 -2
- package/src/formula/index.ts +21 -1
- package/src/formula/simple_params.ts +92 -0
- package/src/formula/type.ts +4 -3
- package/src/ts-types/triggerActionParams.ts +1 -0
- package/src/types/object.ts +183 -25
- package/src/types/object_permission.ts +32 -0
- package/src/types/trigger.ts +1 -0
- package/src/util/function_expression.ts +63 -0
- package/src/util/index.ts +1 -0
- package/src/util/transform.ts +1 -1
package/lib/types/object.js
CHANGED
|
@@ -356,7 +356,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
356
356
|
};
|
|
357
357
|
SteedosObjectType.prototype.runTriggerActions = function (when, context) {
|
|
358
358
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
359
|
-
var triggers, triggers_1, triggers_1_1, trigger, params,
|
|
359
|
+
var triggers, triggers_1, triggers_1_1, trigger, params, e_2_1;
|
|
360
360
|
var e_2, _a;
|
|
361
361
|
return tslib_1.__generator(this, function (_b) {
|
|
362
362
|
switch (_b.label) {
|
|
@@ -368,39 +368,40 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
368
368
|
}
|
|
369
369
|
_b.label = 2;
|
|
370
370
|
case 2:
|
|
371
|
-
_b.trys.push([2,
|
|
371
|
+
_b.trys.push([2, 7, 8, 9]);
|
|
372
372
|
triggers_1 = tslib_1.__values(triggers), triggers_1_1 = triggers_1.next();
|
|
373
373
|
_b.label = 3;
|
|
374
374
|
case 3:
|
|
375
|
-
if (!!triggers_1_1.done) return [3 /*break*/,
|
|
375
|
+
if (!!triggers_1_1.done) return [3 /*break*/, 6];
|
|
376
376
|
trigger = triggers_1_1.value;
|
|
377
377
|
params = util_1.generateActionParams(when, context);
|
|
378
|
-
|
|
378
|
+
return [4 /*yield*/, this._schema.metadataBroker.call(trigger.service.name + "." + trigger.metadata.action, params).catch(function (error) {
|
|
379
|
+
//如果action trigger 下线,则只打印error
|
|
380
|
+
if (error && _.isObject(error) && error.type === 'SERVICE_NOT_AVAILABLE') {
|
|
381
|
+
console.error("runTriggerActions error", error);
|
|
382
|
+
}
|
|
383
|
+
else {
|
|
384
|
+
throw error;
|
|
385
|
+
}
|
|
386
|
+
})];
|
|
379
387
|
case 4:
|
|
380
|
-
_b.trys.push([4, 6, , 7]);
|
|
381
|
-
return [4 /*yield*/, this._schema.metadataBroker.call(trigger.service.name + "." + trigger.metadata.action, params)];
|
|
382
|
-
case 5:
|
|
383
388
|
_b.sent();
|
|
384
|
-
|
|
385
|
-
case
|
|
386
|
-
error_1 = _b.sent();
|
|
387
|
-
console.error(error_1);
|
|
388
|
-
return [3 /*break*/, 7];
|
|
389
|
-
case 7:
|
|
389
|
+
_b.label = 5;
|
|
390
|
+
case 5:
|
|
390
391
|
triggers_1_1 = triggers_1.next();
|
|
391
392
|
return [3 /*break*/, 3];
|
|
392
|
-
case
|
|
393
|
-
case
|
|
393
|
+
case 6: return [3 /*break*/, 9];
|
|
394
|
+
case 7:
|
|
394
395
|
e_2_1 = _b.sent();
|
|
395
396
|
e_2 = { error: e_2_1 };
|
|
396
|
-
return [3 /*break*/,
|
|
397
|
-
case
|
|
397
|
+
return [3 /*break*/, 9];
|
|
398
|
+
case 8:
|
|
398
399
|
try {
|
|
399
400
|
if (triggers_1_1 && !triggers_1_1.done && (_a = triggers_1.return)) _a.call(triggers_1);
|
|
400
401
|
}
|
|
401
402
|
finally { if (e_2) throw e_2.error; }
|
|
402
403
|
return [7 /*endfinally*/];
|
|
403
|
-
case
|
|
404
|
+
case 9: return [2 /*return*/];
|
|
404
405
|
}
|
|
405
406
|
});
|
|
406
407
|
});
|
|
@@ -555,7 +556,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
555
556
|
SteedosObjectType.prototype.refreshIndexes = function () {
|
|
556
557
|
var e_3, _a, e_4, _b;
|
|
557
558
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
558
|
-
var adapter, collection, indexesInfo, dropIndexNames, key, field, info, indexesInfo_1, indexesInfo_1_1, indexInfo, key,
|
|
559
|
+
var adapter, collection, indexesInfo, dropIndexNames, key, field, info, indexesInfo_1, indexesInfo_1_1, indexInfo, key, error_1, e_3_1, error_2, dropIndexNames_1, dropIndexNames_1_1, indexName, error_3, e_4_1, error_4;
|
|
559
560
|
return tslib_1.__generator(this, function (_c) {
|
|
560
561
|
switch (_c.label) {
|
|
561
562
|
case 0:
|
|
@@ -600,8 +601,8 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
600
601
|
_c.sent();
|
|
601
602
|
return [3 /*break*/, 9];
|
|
602
603
|
case 8:
|
|
603
|
-
|
|
604
|
-
console.error(
|
|
604
|
+
error_1 = _c.sent();
|
|
605
|
+
console.error(error_1);
|
|
605
606
|
return [3 /*break*/, 9];
|
|
606
607
|
case 9: return [3 /*break*/, 4];
|
|
607
608
|
case 10: return [3 /*break*/, 17];
|
|
@@ -623,8 +624,8 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
623
624
|
case 16: return [7 /*endfinally*/];
|
|
624
625
|
case 17: return [3 /*break*/, 19];
|
|
625
626
|
case 18:
|
|
626
|
-
|
|
627
|
-
console.error(
|
|
627
|
+
error_2 = _c.sent();
|
|
628
|
+
console.error(error_2);
|
|
628
629
|
return [3 /*break*/, 19];
|
|
629
630
|
case 19:
|
|
630
631
|
if (!(dropIndexNames && dropIndexNames.length > 0)) return [3 /*break*/, 37];
|
|
@@ -648,7 +649,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
648
649
|
_c.sent();
|
|
649
650
|
return [3 /*break*/, 27];
|
|
650
651
|
case 26:
|
|
651
|
-
|
|
652
|
+
error_3 = _c.sent();
|
|
652
653
|
return [3 /*break*/, 27];
|
|
653
654
|
case 27: return [3 /*break*/, 22];
|
|
654
655
|
case 28: return [3 /*break*/, 35];
|
|
@@ -670,8 +671,8 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
670
671
|
case 34: return [7 /*endfinally*/];
|
|
671
672
|
case 35: return [3 /*break*/, 37];
|
|
672
673
|
case 36:
|
|
673
|
-
|
|
674
|
-
console.error(
|
|
674
|
+
error_4 = _c.sent();
|
|
675
|
+
console.error(error_4);
|
|
675
676
|
return [3 /*break*/, 37];
|
|
676
677
|
case 37: return [2 /*return*/];
|
|
677
678
|
}
|
|
@@ -712,7 +713,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
712
713
|
};
|
|
713
714
|
SteedosObjectType.prototype.getUserObjectPermission = function (userSession) {
|
|
714
715
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
715
|
-
var roles, objectRolesPermission, userObjectPermission, spaceId;
|
|
716
|
+
var roles, objectRolesPermission, userObjectPermission, field_permissions, spaceId;
|
|
716
717
|
return tslib_1.__generator(this, function (_a) {
|
|
717
718
|
if (!userSession) {
|
|
718
719
|
throw new Error('userSession is required');
|
|
@@ -738,7 +739,10 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
738
739
|
disabled_actions: null,
|
|
739
740
|
unreadable_fields: null,
|
|
740
741
|
uneditable_fields: null,
|
|
741
|
-
unrelated_objects: null
|
|
742
|
+
unrelated_objects: null,
|
|
743
|
+
field_permissions: null,
|
|
744
|
+
read_filters: [],
|
|
745
|
+
edit_filters: []
|
|
742
746
|
};
|
|
743
747
|
if (_.isEmpty(roles)) {
|
|
744
748
|
throw new Error('not find user permission');
|
|
@@ -758,6 +762,16 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
758
762
|
userObjectPermission[k] = _v;
|
|
759
763
|
}
|
|
760
764
|
}
|
|
765
|
+
else if (['read_filters', 'edit_filters'].indexOf(k) > -1) {
|
|
766
|
+
if ('edit_filters' === k) {
|
|
767
|
+
if (!_.isEmpty(_v)) {
|
|
768
|
+
userObjectPermission['read_filters'].push(_v);
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
if (!_.isEmpty(_v)) {
|
|
772
|
+
userObjectPermission[k].push(_v);
|
|
773
|
+
}
|
|
774
|
+
}
|
|
761
775
|
else if ((_.isArray(v) || _.isNull(v))) {
|
|
762
776
|
if (!_.isArray(_v)) {
|
|
763
777
|
_v = [];
|
|
@@ -766,12 +780,40 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
766
780
|
userObjectPermission[k] = _v;
|
|
767
781
|
}
|
|
768
782
|
else {
|
|
769
|
-
|
|
783
|
+
if (k === 'field_permissions') {
|
|
784
|
+
userObjectPermission[k] = _.union(v, _v);
|
|
785
|
+
}
|
|
786
|
+
else {
|
|
787
|
+
userObjectPermission[k] = _.intersection(v, _v);
|
|
788
|
+
}
|
|
770
789
|
}
|
|
771
790
|
}
|
|
772
791
|
});
|
|
773
792
|
}
|
|
774
793
|
});
|
|
794
|
+
field_permissions = {};
|
|
795
|
+
if (userObjectPermission.field_permissions) {
|
|
796
|
+
_.each(userObjectPermission.field_permissions, function (field_permission) {
|
|
797
|
+
var field = field_permission.field, read = field_permission.read, edit = field_permission.edit;
|
|
798
|
+
if (field_permissions[field]) {
|
|
799
|
+
field_permissions[field].edit = field_permissions[field].edit || edit;
|
|
800
|
+
if (field_permissions[field].edit) {
|
|
801
|
+
field_permissions[field].read = true;
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
field_permissions[field].read = field_permissions[field].read || read;
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
else {
|
|
808
|
+
field_permissions[field] = {
|
|
809
|
+
field: field,
|
|
810
|
+
read: edit || read,
|
|
811
|
+
edit: edit
|
|
812
|
+
};
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
}
|
|
816
|
+
userObjectPermission.field_permissions = field_permissions;
|
|
775
817
|
userObjectPermission.disabled_list_views = userObjectPermission.disabled_list_views || [];
|
|
776
818
|
userObjectPermission.disabled_actions = userObjectPermission.disabled_actions || [];
|
|
777
819
|
userObjectPermission.unreadable_fields = userObjectPermission.unreadable_fields || [];
|
|
@@ -781,7 +823,6 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
781
823
|
if (util_1.isTemplateSpace(spaceId)) {
|
|
782
824
|
return [2 /*return*/, Object.assign({}, userObjectPermission, { allowRead: true, viewAllRecords: true, viewCompanyRecords: true })];
|
|
783
825
|
}
|
|
784
|
-
Creator.processPermissions(userObjectPermission);
|
|
785
826
|
return [2 /*return*/, userObjectPermission];
|
|
786
827
|
});
|
|
787
828
|
});
|
|
@@ -1283,7 +1324,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1283
1324
|
};
|
|
1284
1325
|
SteedosObjectType.prototype.getRecordView = function (userSession) {
|
|
1285
1326
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1286
|
-
var lng, objectMetadataConfig, objectConfig, _a, _b, _c, _d, layouts, layout, _fields_1, sort_no_1, layoutFieldKeys, objectFieldKeys, difference, layoutButtonsName_1, spaceProcessDefinition, dbListViews;
|
|
1327
|
+
var lng, objectMetadataConfig, objectConfig, _a, _b, _c, _d, layouts, layout, _fields_1, sort_no_1, layoutFieldKeys, objectFieldKeys, difference, layoutButtonsName_1, userObjectFields, spaceProcessDefinition, dbListViews;
|
|
1287
1328
|
return tslib_1.__generator(this, function (_e) {
|
|
1288
1329
|
switch (_e.label) {
|
|
1289
1330
|
case 0:
|
|
@@ -1383,6 +1424,23 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1383
1424
|
}
|
|
1384
1425
|
});
|
|
1385
1426
|
}
|
|
1427
|
+
userObjectFields = objectConfig.fields;
|
|
1428
|
+
_.each(objectConfig.permissions.field_permissions, function (field_permission, field) {
|
|
1429
|
+
var read = field_permission.read, edit = field_permission.edit;
|
|
1430
|
+
if (read) {
|
|
1431
|
+
userObjectFields[field].omit = true;
|
|
1432
|
+
}
|
|
1433
|
+
if (edit) {
|
|
1434
|
+
userObjectFields[field].omit = false;
|
|
1435
|
+
userObjectFields[field].hidden = false;
|
|
1436
|
+
userObjectFields[field].readonly = false;
|
|
1437
|
+
userObjectFields[field].disabled = false;
|
|
1438
|
+
}
|
|
1439
|
+
if (!read && !edit) {
|
|
1440
|
+
delete userObjectFields[field];
|
|
1441
|
+
}
|
|
1442
|
+
});
|
|
1443
|
+
objectConfig.fields = userObjectFields;
|
|
1386
1444
|
return [4 /*yield*/, getObject("process_definition").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], ['active', '=', true]] })];
|
|
1387
1445
|
case 7:
|
|
1388
1446
|
spaceProcessDefinition = _e.sent();
|
|
@@ -1551,7 +1609,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1551
1609
|
};
|
|
1552
1610
|
SteedosObjectType.prototype.createDefaulRecordView = function (userSession) {
|
|
1553
1611
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1554
|
-
var name, label, profiles, defaultRecordView,
|
|
1612
|
+
var name, label, profiles, defaultRecordView, error_5;
|
|
1555
1613
|
return tslib_1.__generator(this, function (_a) {
|
|
1556
1614
|
switch (_a.label) {
|
|
1557
1615
|
case 0:
|
|
@@ -1567,8 +1625,8 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1567
1625
|
return [4 /*yield*/, getObject('object_layouts').insert(Object.assign({}, defaultRecordView, { name: name, label: label, profiles: profiles }), userSession)];
|
|
1568
1626
|
case 3: return [2 /*return*/, _a.sent()];
|
|
1569
1627
|
case 4:
|
|
1570
|
-
|
|
1571
|
-
return [2 /*return*/, { error:
|
|
1628
|
+
error_5 = _a.sent();
|
|
1629
|
+
return [2 /*return*/, { error: error_5.message }];
|
|
1572
1630
|
case 5: return [2 /*return*/];
|
|
1573
1631
|
}
|
|
1574
1632
|
});
|
|
@@ -1737,6 +1795,42 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1737
1795
|
});
|
|
1738
1796
|
});
|
|
1739
1797
|
};
|
|
1798
|
+
SteedosObjectType.prototype.appendRecordPermission = function (records, userSession) {
|
|
1799
|
+
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1800
|
+
var _ids, objPm, permissionFilters, filters, results, allowEditIds;
|
|
1801
|
+
return tslib_1.__generator(this, function (_a) {
|
|
1802
|
+
switch (_a.label) {
|
|
1803
|
+
case 0:
|
|
1804
|
+
_ids = _.pluck(records, '_id');
|
|
1805
|
+
return [4 /*yield*/, this.getUserObjectPermission(userSession)];
|
|
1806
|
+
case 1:
|
|
1807
|
+
objPm = _a.sent();
|
|
1808
|
+
permissionFilters = this.getObjectPermissionFilters(objPm, userSession, true);
|
|
1809
|
+
if (_.isEmpty(permissionFilters)) {
|
|
1810
|
+
return [2 /*return*/];
|
|
1811
|
+
}
|
|
1812
|
+
filters = filters_1.formatFiltersToODataQuery(['_id', 'in', _ids]);
|
|
1813
|
+
return [4 /*yield*/, this.directFind({
|
|
1814
|
+
fields: ['_id'],
|
|
1815
|
+
filters: "(" + filters + ") and (" + permissionFilters.join(' or ') + ")"
|
|
1816
|
+
})];
|
|
1817
|
+
case 2:
|
|
1818
|
+
results = _a.sent();
|
|
1819
|
+
allowEditIds = _.pluck(results, '_id');
|
|
1820
|
+
_.each(records, function (record) {
|
|
1821
|
+
if (_.include(allowEditIds, record._id)) {
|
|
1822
|
+
record.record_permissions = {
|
|
1823
|
+
allowRead: true,
|
|
1824
|
+
allowEdit: true,
|
|
1825
|
+
allowDelete: true,
|
|
1826
|
+
};
|
|
1827
|
+
}
|
|
1828
|
+
});
|
|
1829
|
+
return [2 /*return*/];
|
|
1830
|
+
}
|
|
1831
|
+
});
|
|
1832
|
+
});
|
|
1833
|
+
};
|
|
1740
1834
|
SteedosObjectType.prototype.getTriggerContext = function (when, method, args, recordId) {
|
|
1741
1835
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1742
1836
|
var userSession, context, _a;
|
|
@@ -1744,7 +1838,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1744
1838
|
switch (_b.label) {
|
|
1745
1839
|
case 0:
|
|
1746
1840
|
userSession = args[args.length - 1];
|
|
1747
|
-
context = { userId: userSession ? userSession.userId : undefined, spaceId: userSession ? userSession.spaceId : undefined };
|
|
1841
|
+
context = { objectName: this.name, userId: userSession ? userSession.userId : undefined, spaceId: userSession ? userSession.spaceId : undefined };
|
|
1748
1842
|
if (method === 'find' || method === 'findOne' || method === 'count') {
|
|
1749
1843
|
context.query = args[args.length - 2];
|
|
1750
1844
|
}
|
|
@@ -1826,7 +1920,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1826
1920
|
args[_i - 1] = arguments[_i];
|
|
1827
1921
|
}
|
|
1828
1922
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
1829
|
-
var adapterMethod, allow, objectName, recordId, doc, paramRecordId, returnValue, userSession, beforeTriggerContext, afterTriggerContext, previousDoc, values;
|
|
1923
|
+
var adapterMethod, allow, objectName, recordId, doc, paramRecordId, returnValue, userSession, beforeTriggerContext, afterTriggerContext, previousDoc, values, _records;
|
|
1830
1924
|
return tslib_1.__generator(this, function (_a) {
|
|
1831
1925
|
switch (_a.label) {
|
|
1832
1926
|
case 0:
|
|
@@ -1869,7 +1963,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1869
1963
|
return [4 /*yield*/, adapterMethod.apply(this._datasource, args)];
|
|
1870
1964
|
case 4:
|
|
1871
1965
|
returnValue = _a.sent();
|
|
1872
|
-
return [3 /*break*/,
|
|
1966
|
+
return [3 /*break*/, 25];
|
|
1873
1967
|
case 5:
|
|
1874
1968
|
userSession = args[args.length - 1];
|
|
1875
1969
|
return [4 /*yield*/, this.getTriggerContext('before', method, args)];
|
|
@@ -1895,31 +1989,43 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1895
1989
|
return [4 /*yield*/, adapterMethod.apply(this._datasource, args)];
|
|
1896
1990
|
case 10:
|
|
1897
1991
|
returnValue = _a.sent();
|
|
1898
|
-
if (method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline')
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1992
|
+
if (!(method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline')) return [3 /*break*/, 14];
|
|
1993
|
+
values = returnValue || {};
|
|
1994
|
+
if (!(method === 'count')) return [3 /*break*/, 11];
|
|
1995
|
+
values = returnValue || 0;
|
|
1996
|
+
return [3 /*break*/, 13];
|
|
1997
|
+
case 11:
|
|
1998
|
+
if (!userSession) return [3 /*break*/, 13];
|
|
1999
|
+
_records = returnValue;
|
|
2000
|
+
if (method == 'findOne' && returnValue) {
|
|
2001
|
+
_records = [_records];
|
|
1904
2002
|
}
|
|
2003
|
+
return [4 /*yield*/, this.appendRecordPermission(_records, userSession)];
|
|
2004
|
+
case 12:
|
|
2005
|
+
_a.sent();
|
|
2006
|
+
_a.label = 13;
|
|
2007
|
+
case 13:
|
|
2008
|
+
Object.assign(afterTriggerContext, { data: { values: values } });
|
|
2009
|
+
_a.label = 14;
|
|
2010
|
+
case 14:
|
|
1905
2011
|
// console.log("==returnValue==", returnValue);
|
|
1906
2012
|
if (method == 'insert' && _.has(returnValue, '_id')) {
|
|
1907
2013
|
afterTriggerContext.doc = returnValue;
|
|
1908
2014
|
afterTriggerContext = Object.assign({}, afterTriggerContext, { id: returnValue._id });
|
|
1909
2015
|
}
|
|
1910
|
-
if (!(method == "update")) return [3 /*break*/,
|
|
1911
|
-
if (!returnValue) return [3 /*break*/,
|
|
2016
|
+
if (!(method == "update")) return [3 /*break*/, 17];
|
|
2017
|
+
if (!returnValue) return [3 /*break*/, 16];
|
|
1912
2018
|
afterTriggerContext.doc = returnValue;
|
|
1913
2019
|
return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
|
|
1914
|
-
case
|
|
2020
|
+
case 15:
|
|
1915
2021
|
_a.sent();
|
|
1916
|
-
_a.label =
|
|
1917
|
-
case
|
|
1918
|
-
case
|
|
1919
|
-
case
|
|
2022
|
+
_a.label = 16;
|
|
2023
|
+
case 16: return [3 /*break*/, 19];
|
|
2024
|
+
case 17: return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
|
|
2025
|
+
case 18:
|
|
1920
2026
|
_a.sent();
|
|
1921
|
-
_a.label =
|
|
1922
|
-
case
|
|
2027
|
+
_a.label = 19;
|
|
2028
|
+
case 19:
|
|
1923
2029
|
if (method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline') {
|
|
1924
2030
|
if (_.isEmpty(afterTriggerContext.data) || (_.isEmpty(afterTriggerContext.data.values) && !_.isNumber(afterTriggerContext.data.values))) {
|
|
1925
2031
|
return [2 /*return*/, returnValue];
|
|
@@ -1935,9 +2041,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1935
2041
|
user_session: userSession,
|
|
1936
2042
|
previous_record: afterTriggerContext.previousDoc
|
|
1937
2043
|
}).run()];
|
|
1938
|
-
case
|
|
2044
|
+
case 20:
|
|
1939
2045
|
_a.sent();
|
|
1940
|
-
if (!returnValue) return [3 /*break*/,
|
|
2046
|
+
if (!returnValue) return [3 /*break*/, 23];
|
|
1941
2047
|
if (method === "insert") {
|
|
1942
2048
|
// 当为insert时,上面代码执行后的doc不带_id,只能从returnValue中取
|
|
1943
2049
|
doc = returnValue;
|
|
@@ -1945,18 +2051,18 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
1945
2051
|
}
|
|
1946
2052
|
// 一定要先运行公式再运行汇总,以下两个函数顺序不能反
|
|
1947
2053
|
return [4 /*yield*/, this.runRecordFormula(method, objectName, recordId, doc, userSession)];
|
|
1948
|
-
case
|
|
2054
|
+
case 21:
|
|
1949
2055
|
// 一定要先运行公式再运行汇总,以下两个函数顺序不能反
|
|
1950
2056
|
_a.sent();
|
|
1951
2057
|
return [4 /*yield*/, this.runRecordSummaries(method, objectName, recordId, doc, previousDoc, userSession)];
|
|
1952
|
-
case
|
|
2058
|
+
case 22:
|
|
1953
2059
|
_a.sent();
|
|
1954
|
-
_a.label =
|
|
1955
|
-
case
|
|
1956
|
-
case
|
|
2060
|
+
_a.label = 23;
|
|
2061
|
+
case 23: return [4 /*yield*/, object_events_1.brokeEmitEvents(objectName, method, afterTriggerContext)];
|
|
2062
|
+
case 24:
|
|
1957
2063
|
_a.sent();
|
|
1958
|
-
_a.label =
|
|
1959
|
-
case
|
|
2064
|
+
_a.label = 25;
|
|
2065
|
+
case 25: return [2 /*return*/, returnValue];
|
|
1960
2066
|
}
|
|
1961
2067
|
});
|
|
1962
2068
|
});
|
|
@@ -2011,6 +2117,29 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2011
2117
|
});
|
|
2012
2118
|
});
|
|
2013
2119
|
};
|
|
2120
|
+
SteedosObjectType.prototype.getObjectPermissionFilters = function (objectPermission, userSession, isEdit) {
|
|
2121
|
+
var objectPermissionFilters = [];
|
|
2122
|
+
var permissionFiltersKey = 'read_filters';
|
|
2123
|
+
if (isEdit) {
|
|
2124
|
+
permissionFiltersKey = 'edit_filters';
|
|
2125
|
+
}
|
|
2126
|
+
var globalData = Object.assign({}, userSession, { now: new Date() });
|
|
2127
|
+
var permissionFilters = objectPermission[permissionFiltersKey];
|
|
2128
|
+
_.each(permissionFilters, function (permissionFilter) {
|
|
2129
|
+
if (_.isString(permissionFilter) && util_1.isExpression(permissionFilter.trim())) {
|
|
2130
|
+
try {
|
|
2131
|
+
var filters = util_1.parseSingleExpression(permissionFilter, {}, "#", globalData);
|
|
2132
|
+
if (filters && !_.isString(filters)) {
|
|
2133
|
+
objectPermissionFilters.push("(" + filters_1.formatFiltersToODataQuery(filters, userSession) + ")");
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
catch (error) {
|
|
2137
|
+
console.error("getObjectPermissionFilters error", permissionFilter, error.message);
|
|
2138
|
+
}
|
|
2139
|
+
}
|
|
2140
|
+
});
|
|
2141
|
+
return objectPermissionFilters;
|
|
2142
|
+
};
|
|
2014
2143
|
/**
|
|
2015
2144
|
* 把query.filters用formatFiltersToODataQuery转为odata query
|
|
2016
2145
|
* 主要是为了把userSession中的utcOffset逻辑传入formatFiltersToODataQuery函数处理
|
|
@@ -2031,7 +2160,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2031
2160
|
};
|
|
2032
2161
|
SteedosObjectType.prototype.dealWithMethodPermission = function (method, args) {
|
|
2033
2162
|
return tslib_1.__awaiter(this, void 0, void 0, function () {
|
|
2034
|
-
var userSession, spaceId, userId, objPm, query, spaceFilter, companyFilter, ownerFilter, sharesFilter, clientFilter, filters, permissionFilters, userFilters, id, companyFilters, queryFilters, companyFilters, id, companyFilters;
|
|
2163
|
+
var userSession, spaceId, userId, objPm, query, spaceFilter, companyFilter, ownerFilter, sharesFilter, objectPermissionFilters, clientFilter, filters, permissionFilters, userFilters, permissionFilters, objectPermissionEditFilters, id, companyFilters, queryFilters, companyFilters, permissionFilters, objectPermissionEditFilters, id, companyFilters;
|
|
2035
2164
|
return tslib_1.__generator(this, function (_a) {
|
|
2036
2165
|
switch (_a.label) {
|
|
2037
2166
|
case 0:
|
|
@@ -2056,7 +2185,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2056
2185
|
if (util_1.isCloudAdminSpace(spaceId)) {
|
|
2057
2186
|
return [2 /*return*/];
|
|
2058
2187
|
}
|
|
2059
|
-
spaceFilter = void 0, companyFilter = void 0, ownerFilter = void 0, sharesFilter = void 0, clientFilter = query.filters, filters = void 0, permissionFilters = [], userFilters = [];
|
|
2188
|
+
spaceFilter = void 0, companyFilter = void 0, ownerFilter = void 0, sharesFilter = void 0, objectPermissionFilters = void 0, clientFilter = query.filters, filters = void 0, permissionFilters = [], userFilters = [];
|
|
2060
2189
|
if (spaceId) {
|
|
2061
2190
|
spaceFilter = "(space eq '" + spaceId + "')";
|
|
2062
2191
|
}
|
|
@@ -2072,9 +2201,11 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2072
2201
|
if (!objPm.viewAllRecords && !objPm.viewCompanyRecords && objPm.allowRead) { // owner
|
|
2073
2202
|
ownerFilter = "(owner eq '" + userId + "')";
|
|
2074
2203
|
}
|
|
2075
|
-
|
|
2076
|
-
|
|
2204
|
+
objectPermissionFilters = this.getObjectPermissionFilters(objPm, userSession, false);
|
|
2205
|
+
if (!_.isEmpty(objectPermissionFilters)) {
|
|
2206
|
+
permissionFilters.push("(" + objectPermissionFilters.join(' or ') + ")");
|
|
2077
2207
|
}
|
|
2208
|
+
sharesFilter = util_1.getUserObjectSharesFilters(this.name, userSession);
|
|
2078
2209
|
if (!_.isEmpty(companyFilter)) {
|
|
2079
2210
|
permissionFilters.push("(" + companyFilter.join(' or ') + ")");
|
|
2080
2211
|
}
|
|
@@ -2104,9 +2235,14 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2104
2235
|
}
|
|
2105
2236
|
}
|
|
2106
2237
|
else if (method === 'update' || method === 'updateOne') {
|
|
2107
|
-
|
|
2238
|
+
permissionFilters = this.getObjectPermissionFilters(objPm, userSession, true);
|
|
2239
|
+
if (!objPm.allowEdit && _.isEmpty(permissionFilters)) {
|
|
2108
2240
|
throw new Error("no " + method + " permission!");
|
|
2109
2241
|
}
|
|
2242
|
+
objectPermissionEditFilters = '';
|
|
2243
|
+
if (!_.isEmpty(permissionFilters)) {
|
|
2244
|
+
objectPermissionEditFilters = " or (" + permissionFilters.join(' or ') + ")";
|
|
2245
|
+
}
|
|
2110
2246
|
id = args[args.length - 3];
|
|
2111
2247
|
if (!objPm.modifyAllRecords && objPm.modifyCompanyRecords) {
|
|
2112
2248
|
companyFilters = _.map(userSession.companies, function (comp) {
|
|
@@ -2114,25 +2250,36 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2114
2250
|
}).join(' or ');
|
|
2115
2251
|
if (companyFilters) {
|
|
2116
2252
|
if (_.isString(id)) {
|
|
2117
|
-
id = { filters: "(_id eq '" + id + "') and (" + companyFilters + ")" };
|
|
2253
|
+
id = { filters: "(_id eq '" + id + "') and (" + companyFilters + objectPermissionEditFilters + ")" };
|
|
2118
2254
|
}
|
|
2119
2255
|
else if (_.isObject(id)) {
|
|
2120
2256
|
if (id.filters && !_.isString(id.filters)) {
|
|
2121
2257
|
id.filters = filters_1.formatFiltersToODataQuery(id.filters);
|
|
2122
2258
|
}
|
|
2123
|
-
id.filters = id.filters ? "(" + id.filters + ") and (" + companyFilters + ")" : "(" + companyFilters + ")";
|
|
2259
|
+
id.filters = id.filters ? "(" + id.filters + ") and (" + companyFilters + objectPermissionEditFilters + ")" : "(" + companyFilters + objectPermissionEditFilters + ")";
|
|
2124
2260
|
}
|
|
2125
2261
|
}
|
|
2126
2262
|
}
|
|
2127
2263
|
else if (!objPm.modifyAllRecords && !objPm.modifyCompanyRecords && objPm.allowEdit) {
|
|
2128
2264
|
if (_.isString(id)) {
|
|
2129
|
-
id = { filters: "(_id eq '" + id + "') and (owner eq '" + userId + "')" };
|
|
2265
|
+
id = { filters: "(_id eq '" + id + "') and (owner eq '" + userId + "' " + objectPermissionEditFilters + ")" };
|
|
2266
|
+
}
|
|
2267
|
+
else if (_.isObject(id)) {
|
|
2268
|
+
if (id.filters && !_.isString(id.filters)) {
|
|
2269
|
+
id.filters = filters_1.formatFiltersToODataQuery(id.filters);
|
|
2270
|
+
}
|
|
2271
|
+
id.filters = id.filters ? "(" + id.filters + ") and (owner eq '" + userId + "' " + objectPermissionEditFilters + ")" : "(owner eq '" + userId + "' " + objectPermissionEditFilters + ")";
|
|
2272
|
+
}
|
|
2273
|
+
}
|
|
2274
|
+
else if (objectPermissionEditFilters) {
|
|
2275
|
+
if (_.isString(id)) {
|
|
2276
|
+
id = { filters: "(_id eq '" + id + "') and (" + objectPermissionEditFilters + ")" };
|
|
2130
2277
|
}
|
|
2131
2278
|
else if (_.isObject(id)) {
|
|
2132
2279
|
if (id.filters && !_.isString(id.filters)) {
|
|
2133
2280
|
id.filters = filters_1.formatFiltersToODataQuery(id.filters);
|
|
2134
2281
|
}
|
|
2135
|
-
id.filters = id.filters ? "(" + id.filters + ") and (
|
|
2282
|
+
id.filters = id.filters ? "(" + id.filters + ") and (" + objectPermissionEditFilters + ")" : "(" + objectPermissionEditFilters + ")";
|
|
2136
2283
|
}
|
|
2137
2284
|
}
|
|
2138
2285
|
args[args.length - 3] = id;
|
|
@@ -2156,20 +2303,36 @@ var SteedosObjectType = /** @class */ (function (_super) {
|
|
|
2156
2303
|
}
|
|
2157
2304
|
}
|
|
2158
2305
|
else if (method === 'delete') {
|
|
2159
|
-
|
|
2306
|
+
permissionFilters = this.getObjectPermissionFilters(objPm, userSession, true);
|
|
2307
|
+
if (!objPm.allowDelete && _.isEmpty(permissionFilters)) {
|
|
2160
2308
|
throw new Error("no " + method + " permission!");
|
|
2161
2309
|
}
|
|
2310
|
+
objectPermissionEditFilters = '';
|
|
2311
|
+
if (!_.isEmpty(permissionFilters)) {
|
|
2312
|
+
objectPermissionEditFilters = " or (" + permissionFilters.join(' or ') + ")";
|
|
2313
|
+
}
|
|
2162
2314
|
id = args[args.length - 2];
|
|
2163
2315
|
if (!objPm.modifyAllRecords && objPm.modifyCompanyRecords) {
|
|
2164
2316
|
companyFilters = _.map(userSession.companies, function (comp) {
|
|
2165
2317
|
return "(company_id eq '" + comp._id + "') or (company_ids eq '" + comp._id + "')";
|
|
2166
2318
|
}).join(' or ');
|
|
2167
2319
|
if (companyFilters) {
|
|
2168
|
-
id = { filters: "(_id eq '" + id + "') and (" + companyFilters + ")" };
|
|
2320
|
+
id = { filters: "(_id eq '" + id + "') and (" + companyFilters + objectPermissionEditFilters + ")" };
|
|
2169
2321
|
}
|
|
2170
2322
|
}
|
|
2171
2323
|
else if (!objPm.modifyAllRecords && !objPm.modifyCompanyRecords) {
|
|
2172
|
-
id = { filters: "(_id eq '" + id + "') and (owner eq '" + userId + "')" };
|
|
2324
|
+
id = { filters: "(_id eq '" + id + "') and (owner eq '" + userId + "'" + objectPermissionEditFilters + ")" };
|
|
2325
|
+
}
|
|
2326
|
+
else if (objectPermissionEditFilters) {
|
|
2327
|
+
if (_.isString(id)) {
|
|
2328
|
+
id = { filters: "(_id eq '" + id + "') and (" + objectPermissionEditFilters + ")" };
|
|
2329
|
+
}
|
|
2330
|
+
else if (_.isObject(id)) {
|
|
2331
|
+
if (id.filters && !_.isString(id.filters)) {
|
|
2332
|
+
id.filters = filters_1.formatFiltersToODataQuery(id.filters);
|
|
2333
|
+
}
|
|
2334
|
+
id.filters = id.filters ? "(" + id.filters + ") and (" + objectPermissionEditFilters + ")" : "(" + objectPermissionEditFilters + ")";
|
|
2335
|
+
}
|
|
2173
2336
|
}
|
|
2174
2337
|
args[args.length - 2] = id;
|
|
2175
2338
|
}
|