@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.
Files changed (43) hide show
  1. package/lib/dynamic-load/trigger.d.ts +1 -3
  2. package/lib/dynamic-load/trigger.js +24 -14
  3. package/lib/dynamic-load/trigger.js.map +1 -1
  4. package/lib/formula/core.js +22 -5
  5. package/lib/formula/core.js.map +1 -1
  6. package/lib/formula/index.d.ts +2 -0
  7. package/lib/formula/index.js +28 -1
  8. package/lib/formula/index.js.map +1 -1
  9. package/lib/formula/simple_params.d.ts +2 -0
  10. package/lib/formula/simple_params.js +91 -0
  11. package/lib/formula/simple_params.js.map +1 -0
  12. package/lib/formula/type.d.ts +3 -2
  13. package/lib/formula/type.js.map +1 -1
  14. package/lib/ts-types/triggerActionParams.d.ts +1 -0
  15. package/lib/types/object.d.ts +5 -0
  16. package/lib/types/object.js +236 -73
  17. package/lib/types/object.js.map +1 -1
  18. package/lib/types/object_permission.d.ts +1 -0
  19. package/lib/types/object_permission.js +31 -0
  20. package/lib/types/object_permission.js.map +1 -1
  21. package/lib/types/trigger.d.ts +1 -0
  22. package/lib/types/trigger.js.map +1 -1
  23. package/lib/util/function_expression.d.ts +2 -0
  24. package/lib/util/function_expression.js +65 -0
  25. package/lib/util/function_expression.js.map +1 -0
  26. package/lib/util/index.d.ts +1 -0
  27. package/lib/util/index.js +1 -0
  28. package/lib/util/index.js.map +1 -1
  29. package/lib/util/transform.js +1 -1
  30. package/lib/util/transform.js.map +1 -1
  31. package/package.json +8 -8
  32. package/src/dynamic-load/trigger.ts +22 -15
  33. package/src/formula/core.ts +19 -2
  34. package/src/formula/index.ts +21 -1
  35. package/src/formula/simple_params.ts +92 -0
  36. package/src/formula/type.ts +4 -3
  37. package/src/ts-types/triggerActionParams.ts +1 -0
  38. package/src/types/object.ts +183 -25
  39. package/src/types/object_permission.ts +32 -0
  40. package/src/types/trigger.ts +1 -0
  41. package/src/util/function_expression.ts +63 -0
  42. package/src/util/index.ts +1 -0
  43. package/src/util/transform.ts +1 -1
@@ -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, error_1, e_2_1;
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, 9, 10, 11]);
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*/, 8];
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
- _b.label = 4;
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
- return [3 /*break*/, 7];
385
- case 6:
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 8: return [3 /*break*/, 11];
393
- case 9:
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*/, 11];
397
- case 10:
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 11: return [2 /*return*/];
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, error_2, e_3_1, error_3, dropIndexNames_1, dropIndexNames_1_1, indexName, error_4, e_4_1, error_5;
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
- error_2 = _c.sent();
604
- console.error(error_2);
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
- error_3 = _c.sent();
627
- console.error(error_3);
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
- error_4 = _c.sent();
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
- error_5 = _c.sent();
674
- console.error(error_5);
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
- userObjectPermission[k] = _.intersection(v, _v);
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, error_6;
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
- error_6 = _a.sent();
1571
- return [2 /*return*/, { error: error_6.message }];
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*/, 21];
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
- values = returnValue || {};
1900
- if (method === 'count') {
1901
- values = returnValue || 0;
1902
- }
1903
- Object.assign(afterTriggerContext, { data: { values: values } });
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*/, 13];
1911
- if (!returnValue) return [3 /*break*/, 12];
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 11:
2020
+ case 15:
1915
2021
  _a.sent();
1916
- _a.label = 12;
1917
- case 12: return [3 /*break*/, 15];
1918
- case 13: return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
1919
- case 14:
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 = 15;
1922
- case 15:
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 16:
2044
+ case 20:
1939
2045
  _a.sent();
1940
- if (!returnValue) return [3 /*break*/, 19];
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 17:
2054
+ case 21:
1949
2055
  // 一定要先运行公式再运行汇总,以下两个函数顺序不能反
1950
2056
  _a.sent();
1951
2057
  return [4 /*yield*/, this.runRecordSummaries(method, objectName, recordId, doc, previousDoc, userSession)];
1952
- case 18:
2058
+ case 22:
1953
2059
  _a.sent();
1954
- _a.label = 19;
1955
- case 19: return [4 /*yield*/, object_events_1.brokeEmitEvents(objectName, method, afterTriggerContext)];
1956
- case 20:
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 = 21;
1959
- case 21: return [2 /*return*/, returnValue];
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
- if (!objPm.viewAllRecords) {
2076
- sharesFilter = util_1.getUserObjectSharesFilters(this.name, userSession);
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
- if (!objPm.allowEdit) {
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 (owner eq '" + userId + "')" : "(owner eq '" + userId + "')";
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
- if (!objPm.allowDelete) {
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
  }