owl-cli 6.26.0 → 6.27.0

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.
@@ -364,6 +364,154 @@ function filterFields(data, permissions, orgId) {
364
364
  }
365
365
  }
366
366
 
367
+ function mergeArray(a1, a2,section_permission){
368
+ //a1是旧的,a2是新的
369
+ // $.log("diffArray,parentKey=" + parentKey);
370
+
371
+ var temp_matched = [];
372
+ var result = [];
373
+ var merged = [];
374
+ if(!a1){
375
+ a1 = [];
376
+ }
377
+ if(!a2){
378
+ a2 = [];
379
+ }
380
+ for(var i=0; i<a1.length; i++){
381
+ var r1 = a1[i];
382
+ var found = false;
383
+ for(var j=0; j<a2.length; j++){
384
+ var r2 = a2[j];
385
+ if(isEqual(r1,r2)){
386
+ found = true;
387
+ if(isScalar(r2)){
388
+ temp_matched.push(r2);
389
+ }
390
+ else{
391
+ r2._matched = true;
392
+ }
393
+ merged.push(r1);
394
+ break;
395
+ }
396
+ }
397
+ if(!found){
398
+ //r1不存在于a2中,说明r1被删除了
399
+ if(section_permission && section_permission.del === 'denied'){
400
+ //不允许删除
401
+ merged.push(r1);
402
+ }
403
+ }
404
+ }
405
+ for(var i=0; i<a2.length; i++){
406
+ r2 = a2[i];
407
+ if(isScalar(r2)){
408
+ if(temp_matched.indexOf(r2)==-1){
409
+ if(!section_permission || section_permission.add !== 'denied' ){
410
+ merged.push(r2);
411
+ }
412
+ }
413
+
414
+ }
415
+ else if(!r2._matched){
416
+ if(!section_permission || section_permission.add !== 'denied' ){
417
+ merged.push(r2);
418
+ }
419
+ }
420
+ }
421
+ return merged;
422
+ }
423
+
424
+ function merge(oldObj,newObj,permissions,orgId){
425
+ var section_permissions = expandSectionPermission(permissions);
426
+ var field_permissions = expandFieldPermission(permissions);
427
+ var table_permissions = expandTablePermission(permissions);
428
+
429
+ var ef_section_permissions = null;
430
+ var ef_field_permissions = null;
431
+ var ef_table_permissions = null;
432
+ if (data._orgId === orgId) {
433
+ ef_section_permissions = section_permissions.same_org;
434
+ ef_field_permissions = field_permissions.same_org;
435
+ ef_table_permissions = table_permissions.same_org;
436
+ } else {
437
+ ef_section_permissions = section_permissions.sub_org;
438
+ ef_field_permissions = field_permissions.sub_org;
439
+ ef_table_permissions = table_permissions.sub_org;
440
+ }
441
+ if(ef_table_permissions && ef_table_permissions.update==='denied'){
442
+ throw "没有修改权限。"
443
+ }
444
+
445
+ for(var k in oldObj){
446
+ var vo = oldObj[k];
447
+ if(typeof vo === 'object'){
448
+ if(ef_section_permissions[k] && ef_section_permissions[k].update==='denied' || ef_section_permissions[k] && ef_section_permissions[k].read==='denied'){
449
+ newObj[k] = vo;
450
+ continue;
451
+ }
452
+
453
+ if(Array.isArray(vo)){
454
+ //暂时对于Array, 只要对于section有权限,则是对于整行来说的,而不能对于行中的某个字段
455
+ var vn = newObj[k];
456
+ var merged = mergeArray(vo,vn,ef_section_permissions[k]);
457
+ vn[k] = merged;
458
+ }
459
+ else {
460
+ var vn = newObj[k];
461
+ for(var sk in vo){
462
+ var fk = k + "." + sk;
463
+ if(ef_field_permissions[fk] && ef_field_permissions[fk].update==='denied' || ef_field_permissions[fk] && ef_field_permissions[fk].read==='denied'){
464
+ vn[fk] = vo[fk];
465
+ }
466
+ }
467
+ }
468
+ }
469
+ else if(vo === null){
470
+ if((ef_section_permissions[k] && (ef_section_permissions[k].update==='denied' || ef_section_permissions[k].read==='denied') )||
471
+ (ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') )
472
+ ){
473
+ newObj[k] = null;
474
+ }
475
+ }
476
+ else{
477
+ if(ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') ){
478
+ newObj[k] = oldObj[k];
479
+ }
480
+ }
481
+ }
482
+
483
+ for(var k in newObj){
484
+ //找到在new 但是 不在 old里面的,这表明是add
485
+ var vn = newObj[k];
486
+ var vo = oldObj[k];
487
+ if(typeof vn === 'object' ){
488
+
489
+ if(!vo && ef_section_permissions[k] && ef_section_permissions[k].add === 'denied'){
490
+ delete newObj[k];
491
+ }
492
+ else if(Array.isArray(vn)){
493
+ //do nothing
494
+ }
495
+ else{
496
+ for(var nk in vn){
497
+ if(vn[nk] && !vo[nk]){
498
+ var fk = k + "." + nk;
499
+ if(ef_field_permissions[fk] && ef_field_permissions[fk].add === 'denied'){
500
+ delete vn[nk];
501
+ }
502
+ }
503
+ }
504
+ }
505
+ }
506
+ else{
507
+ if(!vo && ef_field_permissions[k] && ef_field_permissions[k].add === 'denied'){
508
+ delete newObj[k];
509
+ }
510
+ }
511
+ }
512
+
513
+ }
514
+
367
515
 
368
516
 
369
517
 
@@ -38,7 +38,7 @@ function isEqual(r1,r2){
38
38
 
39
39
  function diffArray(a1, a2,parentKey){
40
40
  //a1是旧的,a2是新的
41
- $.log("diffArray,parentKey=" + parentKey);
41
+ // $.log("diffArray,parentKey=" + parentKey);
42
42
 
43
43
  var temp_matched = [];
44
44
  var result = [];
@@ -94,8 +94,17 @@ function diffArray(a1, a2,parentKey){
94
94
  return result;
95
95
  }
96
96
 
97
+
98
+
97
99
  function diff(obj1, obj2,parentKey){
98
100
  var result = []
101
+ if(!obj1){
102
+ obj1 = {};
103
+ }
104
+ if(!obj2){
105
+ obj2 = {};
106
+ }
107
+
99
108
  var keys1 = Object.keys(obj1);
100
109
  var keys2 = Object.keys(obj2);
101
110
  keys1.sort();
@@ -203,4 +212,5 @@ function diff(obj1, obj2,parentKey){
203
212
 
204
213
  }
205
214
  return result;
206
- }
215
+ }
216
+
@@ -60,11 +60,9 @@
60
60
  else {
61
61
  modelObject._orgIds = [modelObject._orgId].concat(getParentOrgIds(modelObject._orgId));
62
62
  diffResult = diff(oldObj,modelObject,"");
63
-
64
-
65
- checkUpdatePermission(modelObject,diffResult,permissions,orgId);
66
-
67
- var newdata = @projectCodeService.update( modelObject,env);
63
+ // checkUpdatePermission(modelObject,diffResult,permissions,orgId);
64
+ var merged = merge(oldObj,modelObject,permissions,orgId);
65
+ var newdata = @projectCodeService.update( merged,env);
68
66
  }
69
67
 
70
68
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owl-cli",
3
- "version": "6.26.0",
3
+ "version": "6.27.0",
4
4
  "main": "index.js",
5
5
  "preferGlobal": true,
6
6
  "bin": {