@steedos/objectql 2.2.39 → 2.2.42

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.
@@ -20,6 +20,7 @@ var shareRule_1 = require("./shareRule");
20
20
  var restrictionRule_1 = require("./restrictionRule");
21
21
  var field_permission_1 = require("./field_permission");
22
22
  var dynamic_load_1 = require("../dynamic-load");
23
+ var cachers_1 = require("@steedos/cachers");
23
24
  var clone = require('clone');
24
25
  // 主子表有层级限制,超过3层就报错,该函数判断当前对象作为主表对象往下的层级最多不越过3层,
25
26
  // 其3层指的是A-B-C-D,它们都有父子关系,A作为最顶层,该对象上不可以再创建主表子表关系字段,但是B、C、D上可以;
@@ -397,25 +398,68 @@ var SteedosObjectType = /** @class */ (function (_super) {
397
398
  });
398
399
  });
399
400
  };
401
+ SteedosObjectType.prototype.getTriggerActions = function (when) {
402
+ var _this = this;
403
+ var triggers = [];
404
+ var cache = (0, cachers_1.getCacher)('action-triggers');
405
+ var triggerActions = cache.get('triggerActions');
406
+ if (!_.isEmpty(triggerActions)) {
407
+ _.map(triggerActions, function (item) {
408
+ if (item && item.metadata) {
409
+ var metadata = item.metadata;
410
+ if (metadata.isPattern) {
411
+ try {
412
+ if (metadata.listenTo === '*') {
413
+ triggers.push(item);
414
+ }
415
+ else if (_.isArray(metadata.listenTo) && _.include(metadata.listenTo, _this.name)) {
416
+ triggers.push(item);
417
+ }
418
+ else if (_.isRegExp(metadata.listenTo) && metadata.listenTo.test(_this.name)) {
419
+ triggers.push(item);
420
+ }
421
+ else if (_.isString(metadata.listenTo) && metadata.listenTo.startsWith("/")) {
422
+ try {
423
+ if (_.isRegExp(eval(metadata.listenTo)) && eval(metadata.listenTo).test(_this.name)) {
424
+ triggers.push(item);
425
+ }
426
+ }
427
+ catch (error) {
428
+ }
429
+ }
430
+ }
431
+ catch (error) {
432
+ console.log("error", error);
433
+ }
434
+ }
435
+ else {
436
+ if (metadata.when === when && metadata.listenTo === _this.name) {
437
+ triggers.push(item);
438
+ }
439
+ }
440
+ }
441
+ });
442
+ }
443
+ return triggers;
444
+ };
400
445
  SteedosObjectType.prototype.runTriggerActions = function (when, context) {
401
446
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
402
447
  var triggers, triggers_1, triggers_1_1, trigger, params, e_2_1;
403
448
  var e_2, _a;
404
449
  return (0, tslib_1.__generator)(this, function (_b) {
405
450
  switch (_b.label) {
406
- case 0: return [4 /*yield*/, this._schema.metadataBroker.call('triggers.filter', { objectApiName: this.name, when: when })];
407
- case 1:
408
- triggers = _b.sent();
451
+ case 0:
452
+ triggers = this.getTriggerActions(when);
409
453
  if (_.isEmpty(triggers)) {
410
454
  return [2 /*return*/];
411
455
  }
456
+ _b.label = 1;
457
+ case 1:
458
+ _b.trys.push([1, 6, 7, 8]);
459
+ triggers_1 = (0, tslib_1.__values)(triggers), triggers_1_1 = triggers_1.next();
412
460
  _b.label = 2;
413
461
  case 2:
414
- _b.trys.push([2, 7, 8, 9]);
415
- triggers_1 = (0, tslib_1.__values)(triggers), triggers_1_1 = triggers_1.next();
416
- _b.label = 3;
417
- case 3:
418
- if (!!triggers_1_1.done) return [3 /*break*/, 6];
462
+ if (!!triggers_1_1.done) return [3 /*break*/, 5];
419
463
  trigger = triggers_1_1.value;
420
464
  params = (0, util_1.generateActionParams)(when, context);
421
465
  return [4 /*yield*/, this._schema.metadataBroker.call("".concat(trigger.service.name, ".").concat(trigger.metadata.action), params).catch(function (error) {
@@ -427,24 +471,24 @@ var SteedosObjectType = /** @class */ (function (_super) {
427
471
  throw error;
428
472
  }
429
473
  })];
430
- case 4:
474
+ case 3:
431
475
  _b.sent();
432
- _b.label = 5;
433
- case 5:
476
+ _b.label = 4;
477
+ case 4:
434
478
  triggers_1_1 = triggers_1.next();
435
- return [3 /*break*/, 3];
436
- case 6: return [3 /*break*/, 9];
437
- case 7:
479
+ return [3 /*break*/, 2];
480
+ case 5: return [3 /*break*/, 8];
481
+ case 6:
438
482
  e_2_1 = _b.sent();
439
483
  e_2 = { error: e_2_1 };
440
- return [3 /*break*/, 9];
441
- case 8:
484
+ return [3 /*break*/, 8];
485
+ case 7:
442
486
  try {
443
487
  if (triggers_1_1 && !triggers_1_1.done && (_a = triggers_1.return)) _a.call(triggers_1);
444
488
  }
445
489
  finally { if (e_2) throw e_2.error; }
446
490
  return [7 /*endfinally*/];
447
- case 9: return [2 /*return*/];
491
+ case 8: return [2 /*return*/];
448
492
  }
449
493
  });
450
494
  });
@@ -714,6 +758,12 @@ var SteedosObjectType = /** @class */ (function (_super) {
714
758
  }
715
759
  return globalPermission;
716
760
  };
761
+ /**
762
+ * @description:
763
+ * @param {SteedosUserSession} userSession
764
+ * @param {any} rolesFieldsPermission: 如果为false, 则不计算字段集权限,提交计算效率.
765
+ * @return {*}
766
+ */
717
767
  SteedosObjectType.prototype.getUserObjectPermission = function (userSession, rolesFieldsPermission) {
718
768
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
719
769
  var roles, objectRolesPermission, userObjectPermission, field_permissions, spaceId;
@@ -754,12 +804,16 @@ var SteedosObjectType = /** @class */ (function (_super) {
754
804
  if (_.isEmpty(roles)) {
755
805
  throw new Error('not find user permission');
756
806
  }
757
- if (!!rolesFieldsPermission) return [3 /*break*/, 2];
758
- return [4 /*yield*/, field_permission_1.FieldPermission.getObjectFieldsPermissionGroupRole(this.name)];
807
+ if (!(rolesFieldsPermission === false)) return [3 /*break*/, 1];
808
+ rolesFieldsPermission = {};
809
+ return [3 /*break*/, 3];
759
810
  case 1:
760
- rolesFieldsPermission = _a.sent();
761
- _a.label = 2;
811
+ if (!!rolesFieldsPermission) return [3 /*break*/, 3];
812
+ return [4 /*yield*/, field_permission_1.FieldPermission.getObjectFieldsPermissionGroupRole(this.name)];
762
813
  case 2:
814
+ rolesFieldsPermission = _a.sent();
815
+ _a.label = 3;
816
+ case 3:
763
817
  roles.forEach(function (role) {
764
818
  var rolePermission = objectRolesPermission[role];
765
819
  if (rolePermission) {
@@ -856,7 +910,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
856
910
  });
857
911
  });
858
912
  };
859
- SteedosObjectType.prototype.allowFind = function (userSession) {
913
+ SteedosObjectType.prototype.allowRead = function (userSession) {
860
914
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
861
915
  var userObjectPermission;
862
916
  return (0, tslib_1.__generator)(this, function (_a) {
@@ -864,7 +918,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
864
918
  case 0:
865
919
  if (!userSession)
866
920
  return [2 /*return*/, true];
867
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
921
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
868
922
  case 1:
869
923
  userObjectPermission = _a.sent();
870
924
  if (userObjectPermission.allowRead) {
@@ -886,7 +940,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
886
940
  case 0:
887
941
  if (!userSession)
888
942
  return [2 /*return*/, true];
889
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
943
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
890
944
  case 1:
891
945
  userObjectPermission = _a.sent();
892
946
  if (userObjectPermission.allowCreate) {
@@ -908,7 +962,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
908
962
  case 0:
909
963
  if (!userSession)
910
964
  return [2 /*return*/, true];
911
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
965
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
912
966
  case 1:
913
967
  userObjectPermission = _a.sent();
914
968
  if (userObjectPermission.allowEdit) {
@@ -930,7 +984,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
930
984
  case 0:
931
985
  if (!userSession)
932
986
  return [2 /*return*/, true];
933
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
987
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
934
988
  case 1:
935
989
  userObjectPermission = _a.sent();
936
990
  if (userObjectPermission.allowDelete) {
@@ -951,11 +1005,13 @@ var SteedosObjectType = /** @class */ (function (_super) {
951
1005
  switch (_a.label) {
952
1006
  case 0:
953
1007
  clonedQuery = Object.assign({}, query);
1008
+ if (!userSession) return [3 /*break*/, 2];
954
1009
  return [4 /*yield*/, this.processUnreadableField(userSession, clonedQuery)];
955
1010
  case 1:
956
1011
  _a.sent();
957
- return [4 /*yield*/, this.callAdapter('find', this.table_name, clonedQuery, userSession)];
958
- case 2: return [2 /*return*/, _a.sent()];
1012
+ _a.label = 2;
1013
+ case 2: return [4 /*yield*/, this.callAdapter('find', this.table_name, clonedQuery, userSession)];
1014
+ case 3: return [2 /*return*/, _a.sent()];
959
1015
  }
960
1016
  });
961
1017
  });
@@ -968,11 +1024,13 @@ var SteedosObjectType = /** @class */ (function (_super) {
968
1024
  switch (_a.label) {
969
1025
  case 0:
970
1026
  clonedQuery = Object.assign({}, query);
1027
+ if (!userSession) return [3 /*break*/, 2];
971
1028
  return [4 /*yield*/, this.processUnreadableField(userSession, clonedQuery)];
972
1029
  case 1:
973
1030
  _a.sent();
974
- return [4 /*yield*/, this.callAdapter('aggregate', this.table_name, clonedQuery, externalPipeline, userSession)];
975
- case 2: return [2 /*return*/, _a.sent()];
1031
+ _a.label = 2;
1032
+ case 2: return [4 /*yield*/, this.callAdapter('aggregate', this.table_name, clonedQuery, externalPipeline, userSession)];
1033
+ case 3: return [2 /*return*/, _a.sent()];
976
1034
  }
977
1035
  });
978
1036
  });
@@ -985,11 +1043,13 @@ var SteedosObjectType = /** @class */ (function (_super) {
985
1043
  switch (_a.label) {
986
1044
  case 0:
987
1045
  clonedQuery = Object.assign({}, query);
1046
+ if (!userSession) return [3 /*break*/, 2];
988
1047
  return [4 /*yield*/, this.processUnreadableField(userSession, clonedQuery)];
989
1048
  case 1:
990
1049
  _a.sent();
991
- return [4 /*yield*/, this.callAdapter('directAggregate', this.table_name, clonedQuery, externalPipeline, userSession)];
992
- case 2: return [2 /*return*/, _a.sent()];
1050
+ _a.label = 2;
1051
+ case 2: return [4 /*yield*/, this.callAdapter('directAggregate', this.table_name, clonedQuery, externalPipeline, userSession)];
1052
+ case 3: return [2 /*return*/, _a.sent()];
993
1053
  }
994
1054
  });
995
1055
  });
@@ -1002,27 +1062,33 @@ var SteedosObjectType = /** @class */ (function (_super) {
1002
1062
  switch (_a.label) {
1003
1063
  case 0:
1004
1064
  clonedQuery = Object.assign({}, query);
1065
+ if (!userSession) return [3 /*break*/, 2];
1005
1066
  return [4 /*yield*/, this.processUnreadableField(userSession, clonedQuery)];
1006
1067
  case 1:
1007
1068
  _a.sent();
1008
- return [4 /*yield*/, this.callAdapter('directAggregatePrefixalPipeline', this.table_name, clonedQuery, prefixalPipeline, userSession)];
1009
- case 2: return [2 /*return*/, _a.sent()];
1069
+ _a.label = 2;
1070
+ case 2: return [4 /*yield*/, this.callAdapter('directAggregatePrefixalPipeline', this.table_name, clonedQuery, prefixalPipeline, userSession)];
1071
+ case 3: return [2 /*return*/, _a.sent()];
1010
1072
  }
1011
1073
  });
1012
1074
  });
1013
1075
  };
1014
1076
  SteedosObjectType.prototype.findOne = function (id, query, userSession) {
1015
1077
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1016
- var clonedQuery;
1078
+ var clonedQuery, result;
1017
1079
  return (0, tslib_1.__generator)(this, function (_a) {
1018
1080
  switch (_a.label) {
1019
1081
  case 0:
1020
1082
  clonedQuery = Object.assign({}, query);
1083
+ if (!userSession) return [3 /*break*/, 2];
1021
1084
  return [4 /*yield*/, this.processUnreadableField(userSession, clonedQuery)];
1022
1085
  case 1:
1023
1086
  _a.sent();
1024
- return [4 /*yield*/, this.callAdapter('findOne', this.table_name, id, clonedQuery, userSession)];
1025
- case 2: return [2 /*return*/, _a.sent()];
1087
+ _a.label = 2;
1088
+ case 2: return [4 /*yield*/, this.callAdapter('findOne', this.table_name, id, clonedQuery, userSession)];
1089
+ case 3:
1090
+ result = _a.sent();
1091
+ return [2 /*return*/, result];
1026
1092
  }
1027
1093
  });
1028
1094
  });
@@ -1046,12 +1112,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
1046
1112
  switch (_a.label) {
1047
1113
  case 0:
1048
1114
  doc = this.formatRecord(doc);
1049
- return [4 /*yield*/, this.processUneditableFields(userSession, doc)];
1050
- case 1:
1051
- _a.sent();
1052
1115
  clonedId = id;
1053
1116
  return [4 /*yield*/, this.callAdapter('update', this.table_name, clonedId, doc, userSession)];
1054
- case 2: return [2 /*return*/, _a.sent()];
1117
+ case 1: return [2 /*return*/, _a.sent()];
1055
1118
  }
1056
1119
  });
1057
1120
  });
@@ -1063,12 +1126,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
1063
1126
  switch (_a.label) {
1064
1127
  case 0:
1065
1128
  doc = this.formatRecord(doc);
1066
- return [4 /*yield*/, this.processUneditableFields(userSession, doc)];
1067
- case 1:
1068
- _a.sent();
1069
1129
  clonedId = id;
1070
1130
  return [4 /*yield*/, this.callAdapter('updateOne', this.table_name, clonedId, doc, userSession)];
1071
- case 2: return [2 /*return*/, _a.sent()];
1131
+ case 1: return [2 /*return*/, _a.sent()];
1072
1132
  }
1073
1133
  });
1074
1134
  });
@@ -1081,12 +1141,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
1081
1141
  switch (_a.label) {
1082
1142
  case 0:
1083
1143
  doc = this.formatRecord(doc);
1084
- return [4 /*yield*/, this.processUneditableFields(userSession, doc)];
1085
- case 1:
1086
- _a.sent();
1087
1144
  clonedQueryFilters = queryFilters;
1088
1145
  return [4 /*yield*/, this.callAdapter('updateMany', this.table_name, clonedQueryFilters, doc, userSession)];
1089
- case 2: return [2 /*return*/, _a.sent()];
1146
+ case 1: return [2 /*return*/, _a.sent()];
1090
1147
  }
1091
1148
  });
1092
1149
  });
@@ -1139,12 +1196,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
1139
1196
  switch (_a.label) {
1140
1197
  case 0:
1141
1198
  doc = this.formatRecord(doc);
1142
- return [4 /*yield*/, this.processUneditableFields(userSession, doc)];
1143
- case 1:
1144
- _a.sent();
1145
1199
  clonedId = id;
1146
1200
  return [4 /*yield*/, this.callAdapter('directUpdate', this.table_name, clonedId, doc, userSession)];
1147
- case 2: return [2 /*return*/, _a.sent()];
1201
+ case 1: return [2 /*return*/, _a.sent()];
1148
1202
  }
1149
1203
  });
1150
1204
  });
@@ -1472,18 +1526,13 @@ var SteedosObjectType = /** @class */ (function (_super) {
1472
1526
  return accessFields;
1473
1527
  };
1474
1528
  SteedosObjectType.prototype.getRecordView = function (userSession, context) {
1529
+ if (context === void 0) { context = {}; }
1475
1530
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1476
- var objectConfig, layouts, spaceProcessDefinition, dbListViews, rolesFieldsPermission, lng, objectMetadataConfig, _a, relationsInfo, objectLayout, layoutButtonsName_1;
1531
+ var objectConfig, layouts, spaceProcessDefinition, dbListViews, rolesFieldsPermission, relationsInfo, lng, objectMetadataConfig, _a, objectLayout, layoutButtonsName_1;
1477
1532
  return (0, tslib_1.__generator)(this, function (_b) {
1478
1533
  switch (_b.label) {
1479
1534
  case 0:
1480
- if (context) {
1481
- objectConfig = context.objectConfig;
1482
- layouts = context.layouts;
1483
- spaceProcessDefinition = context.spaceProcessDefinition;
1484
- dbListViews = context.dbListViews;
1485
- rolesFieldsPermission = context.rolesFieldsPermission;
1486
- }
1535
+ objectConfig = context.objectConfig, layouts = context.layouts, spaceProcessDefinition = context.spaceProcessDefinition, dbListViews = context.dbListViews, rolesFieldsPermission = context.rolesFieldsPermission, relationsInfo = context.relationsInfo;
1487
1536
  lng = userSession.language;
1488
1537
  if (!!objectConfig) return [3 /*break*/, 2];
1489
1538
  return [4 /*yield*/, this.callMetadataObjectServiceAction('get', { objectApiName: this.name })];
@@ -1498,62 +1547,26 @@ var SteedosObjectType = /** @class */ (function (_super) {
1498
1547
  return [4 /*yield*/, this.getUserObjectPermission(userSession, rolesFieldsPermission)];
1499
1548
  case 3:
1500
1549
  _a.permissions = _b.sent();
1550
+ if (!!relationsInfo) return [3 /*break*/, 5];
1501
1551
  return [4 /*yield*/, this.getRelationsInfo()];
1502
1552
  case 4:
1503
1553
  relationsInfo = _b.sent();
1554
+ _b.label = 5;
1555
+ case 5:
1504
1556
  objectConfig.details = relationsInfo.details;
1505
1557
  objectConfig.masters = relationsInfo.masters;
1506
1558
  objectConfig.lookup_details = relationsInfo.lookup_details;
1507
1559
  delete objectConfig.db;
1508
1560
  (0, i18n_1.translationObject)(lng, objectConfig.name, objectConfig, true);
1509
- if (!!layouts) return [3 /*break*/, 6];
1561
+ if (!!layouts) return [3 /*break*/, 7];
1510
1562
  return [4 /*yield*/, (0, object_layouts_1.getObjectLayouts)(userSession.profile, userSession.spaceId, this.name)];
1511
- case 5:
1512
- layouts = _b.sent();
1513
- _b.label = 6;
1514
1563
  case 6:
1564
+ layouts = _b.sent();
1565
+ _b.label = 7;
1566
+ case 7:
1515
1567
  objectLayout = null;
1516
1568
  if (layouts && layouts.length > 0) {
1517
1569
  objectLayout = layouts[0];
1518
- // let _fields = {};
1519
- // let sort_no = 1;
1520
- // _.each(layout.fields, function(_item){
1521
- // _fields[_item.field_name] = objectConfig.fields[_item.field_name]
1522
- // if(_fields[_item.field_name]){
1523
- // if(_.has(_item, 'group')){
1524
- // _fields[_item.field_name].group = _item.group
1525
- // }
1526
- // if(_item.is_required){
1527
- // _fields[_item.field_name].readonly = false
1528
- // _fields[_item.field_name].disabled = false
1529
- // _fields[_item.field_name].required = true
1530
- // }else if(_item.is_readonly){
1531
- // _fields[_item.field_name].readonly = true
1532
- // _fields[_item.field_name].disabled = true
1533
- // _fields[_item.field_name].required = false
1534
- // }
1535
- // if(_item.visible_on){
1536
- // _fields[_item.field_name].visible_on = _item.visible_on
1537
- // }
1538
- // // TODO 按新字段权限规则, 调整此部分代码
1539
- // if(['created','created_by','modified','modified_by'].indexOf(_item.field_name) < 0){
1540
- // _fields[_item.field_name].omit = false;
1541
- // _fields[_item.field_name].hidden = false;
1542
- // }
1543
- // _fields[_item.field_name].sort_no = sort_no;
1544
- // sort_no++;
1545
- // }
1546
- // })
1547
- // const layoutFieldKeys = _.keys(_fields);
1548
- // const objectFieldKeys = _.keys(objectConfig.fields);
1549
- // layoutHiddenFields = _.difference(objectFieldKeys, layoutFieldKeys);
1550
- // _.each(layoutFieldKeys, function(fieldApiName){
1551
- // objectConfig.fields[fieldApiName] = _fields[fieldApiName];
1552
- // })
1553
- // _.each(layoutHiddenFields, function(fieldApiName){
1554
- // objectConfig.fields[fieldApiName].hidden = true;
1555
- // objectConfig.fields[fieldApiName].sort_no = 99999;
1556
- // })
1557
1570
  _.each(objectLayout.buttons, function (button) {
1558
1571
  var action = objectConfig.actions[button.button_name];
1559
1572
  if (action) {
@@ -1569,8 +1582,6 @@ var SteedosObjectType = /** @class */ (function (_super) {
1569
1582
  action._visible = function () { return false; }.toString();
1570
1583
  }
1571
1584
  });
1572
- // _object.allow_customActions = userObjectLayout.custom_actions || []
1573
- // _object.exclude_actions = userObjectLayout.exclude_actions || []
1574
1585
  objectConfig.related_lists = objectLayout.related_lists || [];
1575
1586
  _.each(objectConfig.related_lists, function (related_list) {
1576
1587
  if (related_list.sort_field_name && _.isArray(related_list.sort_field_name) && related_list.sort_field_name.length > 0) {
@@ -1581,60 +1592,13 @@ var SteedosObjectType = /** @class */ (function (_super) {
1581
1592
  }
1582
1593
  });
1583
1594
  }
1584
- // _.each(objectConfig.fields, (field)=>{
1585
- // if(field){
1586
- // const fieldPermission = objectConfig.permissions.field_permissions[field.name];
1587
- // const {read, edit} = fieldPermission || {read: !field.hidden, edit: !field.hidden && !field.readonly}
1588
- // //不可查看: 配置了字段权限且不可查看; 没有配置字段权限,字段的hidden为true
1589
- // if(read === false){
1590
- // delete objectConfig.fields[field.name];
1591
- // return;
1592
- // }
1593
- // //可查看不可编辑: 配置了字段权限可查看不可编辑; 没有配置字段权限 字段的hidden 为false 且字段的readonly为true
1594
- // if(read === true && edit === false){
1595
- // objectConfig.fields[field.name].hidden = false;
1596
- // objectConfig.fields[field.name].readonly = true;
1597
- // objectConfig.fields[field.name].disabled = true;
1598
- // return;
1599
- // }
1600
- // //可查看可编辑: 配置了字段权限可查看可编辑; 没有配置字段权限 字段的hidden 为false 且字段的readonly为false
1601
- // if(read === true && edit === true){
1602
- // objectConfig.fields[field.name].hidden = false;
1603
- // objectConfig.fields[field.name].readonly = false;
1604
- // objectConfig.fields[field.name].disabled = false;
1605
- // return;
1606
- // }
1607
- // console.error('字段权限处理异常', field, read, edit);
1608
- // }
1609
- // })
1610
- // _.each(objectConfig.permissions.field_permissions, (field_permission, field) => {
1611
- // const { read, edit } = field_permission;
1612
- // if (userObjectFields[field] && !_.include(layoutHiddenFields, field)) {
1613
- // if (read) {
1614
- // userObjectFields[field].hidden = false;
1615
- // userObjectFields[field].omit = true;
1616
- // userObjectFields[field].readonly = true;
1617
- // userObjectFields[field].disabled = true;
1618
- // }
1619
- // if (edit) {
1620
- // userObjectFields[field].omit = false;
1621
- // userObjectFields[field].hidden = false;
1622
- // userObjectFields[field].readonly = false;
1623
- // userObjectFields[field].disabled = false;
1624
- // }
1625
- // if (!read && !edit) {
1626
- // delete userObjectFields[field]
1627
- // }
1628
- // }
1629
- // })
1630
- // objectConfig.fields = userObjectFields
1631
1595
  objectConfig.fields = this.getAccessFields(objectConfig.fields, objectLayout, objectConfig.permissions);
1632
- if (!!spaceProcessDefinition) return [3 /*break*/, 8];
1596
+ if (!!spaceProcessDefinition) return [3 /*break*/, 9];
1633
1597
  return [4 /*yield*/, getObject("process_definition").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], ['active', '=', true]] })];
1634
- case 7:
1635
- spaceProcessDefinition = _b.sent();
1636
- _b.label = 8;
1637
1598
  case 8:
1599
+ spaceProcessDefinition = _b.sent();
1600
+ _b.label = 9;
1601
+ case 9:
1638
1602
  if (spaceProcessDefinition.length > 0) {
1639
1603
  objectConfig.enable_process = true;
1640
1604
  }
@@ -1644,12 +1608,12 @@ var SteedosObjectType = /** @class */ (function (_super) {
1644
1608
  delete objectConfig.triggers[key];
1645
1609
  }
1646
1610
  });
1647
- if (!!dbListViews) return [3 /*break*/, 10];
1611
+ if (!!dbListViews) return [3 /*break*/, 11];
1648
1612
  return [4 /*yield*/, getObject("object_listviews").directFind({ filters: [['space', '=', userSession.spaceId], ['object_name', '=', this.name], [['owner', '=', userSession.userId], 'or', ['shared', '=', true]]] })];
1649
- case 9:
1650
- dbListViews = _b.sent();
1651
- _b.label = 10;
1652
1613
  case 10:
1614
+ dbListViews = _b.sent();
1615
+ _b.label = 11;
1616
+ case 11:
1653
1617
  objectConfig.list_views = Object.assign({}, objectConfig.list_views);
1654
1618
  _.each(dbListViews, function (dbListView) {
1655
1619
  delete dbListView.created;
@@ -1666,7 +1630,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
1666
1630
  });
1667
1631
  });
1668
1632
  };
1669
- SteedosObjectType.prototype.getDefaulRecordView = function (userSession) {
1633
+ SteedosObjectType.prototype.getDefaultRecordView = function (userSession) {
1670
1634
  var e_4, _a;
1671
1635
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1672
1636
  var object_name, type, buttons, fields, related_lists, objectConfig, sortedFields, relatedLists, details, lookup_details, relatedLists_1, relatedLists_1_1, related, relatedItem, foo, rObjectName, relatedObject, relatedObjectAllListView, fieldNames_1, e_4_1;
@@ -1805,7 +1769,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
1805
1769
  });
1806
1770
  });
1807
1771
  };
1808
- SteedosObjectType.prototype.createDefaulRecordView = function (userSession) {
1772
+ SteedosObjectType.prototype.createDefaultRecordView = function (userSession) {
1809
1773
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
1810
1774
  var name, label, profiles, defaultRecordView, error_3;
1811
1775
  return (0, tslib_1.__generator)(this, function (_a) {
@@ -1817,7 +1781,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
1817
1781
  _a.label = 1;
1818
1782
  case 1:
1819
1783
  _a.trys.push([1, 4, , 5]);
1820
- return [4 /*yield*/, this.getDefaulRecordView(userSession)];
1784
+ return [4 /*yield*/, this.getDefaultRecordView(userSession)];
1821
1785
  case 2:
1822
1786
  defaultRecordView = _a.sent();
1823
1787
  return [4 /*yield*/, getObject('object_layouts').insert(Object.assign({}, defaultRecordView, { name: name, label: label, profiles: profiles }), userSession)];
@@ -1937,7 +1901,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
1937
1901
  return [2 /*return*/, true];
1938
1902
  }
1939
1903
  if (!(method === 'find' || method === 'findOne' || method === 'count' || method === 'aggregate' || method === 'aggregatePrefixalPipeline')) return [3 /*break*/, 2];
1940
- return [4 /*yield*/, this.allowFind(userSession)];
1904
+ return [4 /*yield*/, this.allowRead(userSession)];
1941
1905
  case 1: return [2 /*return*/, _a.sent()];
1942
1906
  case 2:
1943
1907
  if (!(method === 'insert')) return [3 /*break*/, 4];
@@ -2000,7 +1964,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
2000
1964
  switch (_a.label) {
2001
1965
  case 0:
2002
1966
  _ids = _.pluck(records, '_id');
2003
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
1967
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
2004
1968
  case 1:
2005
1969
  objPm = _a.sent();
2006
1970
  permissionFilters = this.getObjectEditPermissionFilters(objPm, userSession);
@@ -2069,7 +2033,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
2069
2033
  if (!userSession) {
2070
2034
  return [2 /*return*/];
2071
2035
  }
2072
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
2036
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
2073
2037
  case 1:
2074
2038
  userObjectPermission = _a.sent();
2075
2039
  userObjectUnreadableFields = userObjectPermission.unreadable_fields;
@@ -2105,13 +2069,22 @@ var SteedosObjectType = /** @class */ (function (_super) {
2105
2069
  });
2106
2070
  });
2107
2071
  };
2108
- SteedosObjectType.prototype.processUneditableFields = function (userSession, doc) {
2109
- return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2110
- return (0, tslib_1.__generator)(this, function (_a) {
2111
- return [2 /*return*/];
2112
- });
2113
- });
2114
- };
2072
+ // private async processUneditableFields(userSession: SteedosUserSession, doc: JsonMap) {
2073
+ // 后台直接去掉uneditable_fields相关判断逻辑
2074
+ // [签约对象同时配置了company_ids必填及uneditable_fields造成部分用户新建签约对象时报错 #192](https://github.com/steedos/steedos-project-dzug/issues/192)
2075
+ // if (!userSession) {
2076
+ // return
2077
+ // }
2078
+ // let userObjectPermission = await this.getUserObjectPermission(userSession)
2079
+ // let userObjectUneditableFields = userObjectPermission.uneditable_fields
2080
+ // let intersection = _.intersection(userObjectUneditableFields, _.keys(doc))
2081
+ // if (intersection.length > 0) {
2082
+ // throw new Error(`no permissions to edit fields ${intersection.join(', ')}`)
2083
+ // }
2084
+ // // _.each(userObjectUneditableFields, (name: string)=>{
2085
+ // // delete doc[name]
2086
+ // // })
2087
+ // }
2115
2088
  SteedosObjectType.prototype.formatRecord = function (doc) {
2116
2089
  var adapterFormat = this._datasource["formatRecord"];
2117
2090
  if (typeof adapterFormat == 'function') {
@@ -2125,7 +2098,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
2125
2098
  args[_i - 1] = arguments[_i];
2126
2099
  }
2127
2100
  return (0, tslib_1.__awaiter)(this, void 0, void 0, function () {
2128
- var adapterMethod, allow, objectName, recordId, doc, paramRecordId, returnValue, userSession, beforeTriggerContext, afterTriggerContext, previousDoc, values, _records;
2101
+ var adapterMethod, userSession, allow, objectName, recordId, doc, paramRecordId, returnValue, beforeTriggerContext, afterTriggerContext, previousDoc, values, _records;
2129
2102
  return (0, tslib_1.__generator)(this, function (_a) {
2130
2103
  switch (_a.label) {
2131
2104
  case 0:
@@ -2133,12 +2106,16 @@ var SteedosObjectType = /** @class */ (function (_super) {
2133
2106
  if (typeof adapterMethod !== 'function') {
2134
2107
  throw new Error('Adapted does not support "' + method + '" method');
2135
2108
  }
2136
- return [4 /*yield*/, this.allow(method, args[args.length - 1])];
2109
+ userSession = args[args.length - 1];
2110
+ if (!!_.isEmpty(userSession)) return [3 /*break*/, 2];
2111
+ return [4 /*yield*/, this.allow(method, userSession)];
2137
2112
  case 1:
2138
2113
  allow = _a.sent();
2139
2114
  if (!allow) {
2140
2115
  throw new Error('not find permission');
2141
2116
  }
2117
+ _a.label = 2;
2118
+ case 2:
2142
2119
  objectName = args[0];
2143
2120
  if (["insert", "update", "updateMany", "delete"].indexOf(method) > -1) {
2144
2121
  // 因下面的代码,比如函数dealWithMethodPermission可能改写args变量,所以需要提前从args取出对应变量值。
@@ -2155,36 +2132,33 @@ var SteedosObjectType = /** @class */ (function (_super) {
2155
2132
  if (method === 'findOne' || method === 'update' || method === 'delete') {
2156
2133
  paramRecordId = args[1];
2157
2134
  }
2158
- if (!this._datasource.enable_space) return [3 /*break*/, 3];
2135
+ if (!(!_.isEmpty(userSession) && this._datasource.enable_space)) return [3 /*break*/, 4];
2159
2136
  this.dealWithFilters(method, args);
2160
2137
  return [4 /*yield*/, this.dealWithMethodPermission(method, args)];
2161
- case 2:
2162
- _a.sent();
2163
- _a.label = 3;
2164
2138
  case 3:
2165
- if (!this.isDirectCRUD(method)) return [3 /*break*/, 5];
2166
- userSession = args[args.length - 1];
2139
+ _a.sent();
2140
+ _a.label = 4;
2141
+ case 4:
2142
+ if (!this.isDirectCRUD(method)) return [3 /*break*/, 6];
2167
2143
  args.splice(args.length - 1, 1, userSession ? userSession.userId : undefined);
2168
2144
  return [4 /*yield*/, adapterMethod.apply(this._datasource, args)];
2169
- case 4:
2170
- returnValue = _a.sent();
2171
- return [3 /*break*/, 25];
2172
2145
  case 5:
2173
- userSession = args[args.length - 1];
2174
- return [4 /*yield*/, this.getTriggerContext('before', method, args)];
2175
- case 6:
2146
+ returnValue = _a.sent();
2147
+ return [3 /*break*/, 26];
2148
+ case 6: return [4 /*yield*/, this.getTriggerContext('before', method, args)];
2149
+ case 7:
2176
2150
  beforeTriggerContext = _a.sent();
2177
2151
  if (paramRecordId) {
2178
2152
  beforeTriggerContext = Object.assign({}, beforeTriggerContext, { id: paramRecordId });
2179
2153
  }
2180
2154
  return [4 /*yield*/, this.runBeforeTriggers(method, beforeTriggerContext)];
2181
- case 7:
2155
+ case 8:
2182
2156
  _a.sent();
2183
2157
  return [4 /*yield*/, (0, validation_rules_1.runValidationRules)(method, beforeTriggerContext, args[0], userSession)];
2184
- case 8:
2158
+ case 9:
2185
2159
  _a.sent();
2186
2160
  return [4 /*yield*/, this.getTriggerContext('after', method, args, paramRecordId)];
2187
- case 9:
2161
+ case 10:
2188
2162
  afterTriggerContext = _a.sent();
2189
2163
  if (paramRecordId) {
2190
2164
  afterTriggerContext = Object.assign({}, afterTriggerContext, { id: paramRecordId });
@@ -2192,45 +2166,45 @@ var SteedosObjectType = /** @class */ (function (_super) {
2192
2166
  previousDoc = clone(afterTriggerContext.previousDoc);
2193
2167
  args.splice(args.length - 1, 1, userSession ? userSession.userId : undefined);
2194
2168
  return [4 /*yield*/, adapterMethod.apply(this._datasource, args)];
2195
- case 10:
2169
+ case 11:
2196
2170
  returnValue = _a.sent();
2197
- if (!(method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline')) return [3 /*break*/, 14];
2171
+ if (!(method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline')) return [3 /*break*/, 15];
2198
2172
  values = returnValue || {};
2199
- if (!(method === 'count')) return [3 /*break*/, 11];
2173
+ if (!(method === 'count')) return [3 /*break*/, 12];
2200
2174
  values = returnValue || 0;
2201
- return [3 /*break*/, 13];
2202
- case 11:
2203
- if (!userSession) return [3 /*break*/, 13];
2175
+ return [3 /*break*/, 14];
2176
+ case 12:
2177
+ if (!userSession) return [3 /*break*/, 14];
2204
2178
  _records = returnValue;
2205
2179
  if (method == 'findOne' && returnValue) {
2206
2180
  _records = [_records];
2207
2181
  }
2208
2182
  return [4 /*yield*/, this.appendRecordPermission(_records, userSession)];
2209
- case 12:
2210
- _a.sent();
2211
- _a.label = 13;
2212
2183
  case 13:
2213
- Object.assign(afterTriggerContext, { data: { values: values } });
2184
+ _a.sent();
2214
2185
  _a.label = 14;
2215
2186
  case 14:
2187
+ Object.assign(afterTriggerContext, { data: { values: values } });
2188
+ _a.label = 15;
2189
+ case 15:
2216
2190
  // console.log("==returnValue==", returnValue);
2217
2191
  if (method == 'insert' && _.has(returnValue, '_id')) {
2218
2192
  afterTriggerContext.doc = returnValue;
2219
2193
  afterTriggerContext = Object.assign({}, afterTriggerContext, { id: returnValue._id });
2220
2194
  }
2221
- if (!(method == "update")) return [3 /*break*/, 17];
2222
- if (!returnValue) return [3 /*break*/, 16];
2195
+ if (!(method == "update")) return [3 /*break*/, 18];
2196
+ if (!returnValue) return [3 /*break*/, 17];
2223
2197
  afterTriggerContext.doc = returnValue;
2224
2198
  return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
2225
- case 15:
2226
- _a.sent();
2227
- _a.label = 16;
2228
- case 16: return [3 /*break*/, 19];
2229
- case 17: return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
2230
- case 18:
2199
+ case 16:
2231
2200
  _a.sent();
2232
- _a.label = 19;
2201
+ _a.label = 17;
2202
+ case 17: return [3 /*break*/, 20];
2203
+ case 18: return [4 /*yield*/, this.runAfterTriggers(method, afterTriggerContext)];
2233
2204
  case 19:
2205
+ _a.sent();
2206
+ _a.label = 20;
2207
+ case 20:
2234
2208
  if (method === 'find' || method == 'findOne' || method == 'count' || method == 'aggregate' || method == 'aggregatePrefixalPipeline') {
2235
2209
  if (_.isEmpty(afterTriggerContext.data) || (_.isEmpty(afterTriggerContext.data.values) && !_.isNumber(afterTriggerContext.data.values))) {
2236
2210
  return [2 /*return*/, returnValue];
@@ -2246,9 +2220,9 @@ var SteedosObjectType = /** @class */ (function (_super) {
2246
2220
  user_session: userSession,
2247
2221
  previous_record: afterTriggerContext.previousDoc
2248
2222
  }).run()];
2249
- case 20:
2223
+ case 21:
2250
2224
  _a.sent();
2251
- if (!returnValue) return [3 /*break*/, 23];
2225
+ if (!returnValue) return [3 /*break*/, 24];
2252
2226
  if (method === "insert") {
2253
2227
  // 当为insert时,上面代码执行后的doc不带_id,只能从returnValue中取
2254
2228
  doc = returnValue;
@@ -2256,18 +2230,18 @@ var SteedosObjectType = /** @class */ (function (_super) {
2256
2230
  }
2257
2231
  // 一定要先运行公式再运行汇总,以下两个函数顺序不能反
2258
2232
  return [4 /*yield*/, this.runRecordFormula(method, objectName, recordId, doc, userSession)];
2259
- case 21:
2233
+ case 22:
2260
2234
  // 一定要先运行公式再运行汇总,以下两个函数顺序不能反
2261
2235
  _a.sent();
2262
2236
  return [4 /*yield*/, this.runRecordSummaries(method, objectName, recordId, doc, previousDoc, userSession)];
2263
- case 22:
2237
+ case 23:
2264
2238
  _a.sent();
2265
- _a.label = 23;
2266
- case 23: return [4 /*yield*/, (0, object_events_1.brokeEmitEvents)(objectName, method, afterTriggerContext)];
2267
- case 24:
2239
+ _a.label = 24;
2240
+ case 24: return [4 /*yield*/, (0, object_events_1.brokeEmitEvents)(objectName, method, afterTriggerContext)];
2241
+ case 25:
2268
2242
  _a.sent();
2269
- _a.label = 25;
2270
- case 25: return [2 /*return*/, returnValue];
2243
+ _a.label = 26;
2244
+ case 26: return [2 /*return*/, returnValue];
2271
2245
  }
2272
2246
  });
2273
2247
  });
@@ -2358,7 +2332,7 @@ var SteedosObjectType = /** @class */ (function (_super) {
2358
2332
  if (!userSession) return [3 /*break*/, 5];
2359
2333
  spaceId = userSession.spaceId;
2360
2334
  userId = userSession.userId;
2361
- return [4 /*yield*/, this.getUserObjectPermission(userSession)];
2335
+ return [4 /*yield*/, this.getUserObjectPermission(userSession, false)];
2362
2336
  case 1:
2363
2337
  objPm = _a.sent();
2364
2338
  if (!(method === 'find' || method === 'count' || method === 'findOne' || method === 'aggregate' || method === 'aggregatePrefixalPipeline')) return [3 /*break*/, 4];