owl-cli 6.149.0 → 6.151.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.
Files changed (61) hide show
  1. package/.eslintrc.json +2 -2
  2. package/.vscode/launch.json +22 -22
  3. package/.vscode/settings.json +2 -2
  4. package/bin/createTables.js +94 -94
  5. package/bin/deploy.js +66 -66
  6. package/bin/dsl.js +223 -223
  7. package/bin/genEvents.js +188 -188
  8. package/bin/owl-init.js +50 -50
  9. package/bin/owl.js +305 -305
  10. package/bin/owlconfig.json +16 -16
  11. package/bin/table_mysql.js +189 -189
  12. package/bin/undeploy.js +56 -56
  13. package/defaultTemplate/api/build.xml +94 -94
  14. package/defaultTemplate/api/src/about.html +12 -12
  15. package/defaultTemplate/api/src/about.jsx +11 -11
  16. package/defaultTemplate/api/src/handlers/aggs.jsx +161 -161
  17. package/defaultTemplate/api/src/handlers/batchImport.jsx +78 -78
  18. package/defaultTemplate/api/src/handlers/delete.jsx +88 -88
  19. package/defaultTemplate/api/src/handlers/export.jsx +117 -117
  20. package/defaultTemplate/api/src/handlers/exportDoc.jsx +27 -27
  21. package/defaultTemplate/api/src/handlers/exportEx.jsx +77 -77
  22. package/defaultTemplate/api/src/handlers/exportWithTemplates.jsx +50 -50
  23. package/defaultTemplate/api/src/handlers/exportZip.jsx +26 -26
  24. package/defaultTemplate/api/src/handlers/get.jsx +50 -50
  25. package/defaultTemplate/api/src/handlers/getByIds.jsx +51 -51
  26. package/defaultTemplate/api/src/handlers/getChildren.jsx +96 -96
  27. package/defaultTemplate/api/src/handlers/getExportTaskInfo.jsx +34 -34
  28. package/defaultTemplate/api/src/handlers/getSpec.jsx +40 -40
  29. package/defaultTemplate/api/src/handlers/include/checklogin.jsx +787 -786
  30. package/defaultTemplate/api/src/handlers/include/diff.jsx +315 -315
  31. package/defaultTemplate/api/src/handlers/include/util.jsx +60 -60
  32. package/defaultTemplate/api/src/handlers/list.jsx +252 -252
  33. package/defaultTemplate/api/src/handlers/listEx.jsx +142 -136
  34. package/defaultTemplate/api/src/handlers/reIndex.jsx +63 -63
  35. package/defaultTemplate/api/src/handlers/recovery.jsx +53 -53
  36. package/defaultTemplate/api/src/handlers/save.jsx +125 -125
  37. package/defaultTemplate/api/src/handlers/upload.jsx +72 -72
  38. package/defaultTemplate/api/src/init/indexConfigs/changeMapping.json +14 -14
  39. package/defaultTemplate/api/src/init/indexConfigs/createAliase.json +10 -10
  40. package/defaultTemplate/api/src/init/indexConfigs/createIndex.json +55 -55
  41. package/defaultTemplate/api/src/init/indexConfigs/rebuildIndex.sh +27 -27
  42. package/defaultTemplate/api/src/init/indexConfigs/reindex.json +10 -10
  43. package/defaultTemplate/api/src/init/init.jsx +25 -25
  44. package/defaultTemplate/api/src/meta.json +10 -10
  45. package/defaultTemplate/api/src/services/dblayer.jsx +251 -251
  46. package/defaultTemplate/api/src/services/modelService.jsx +1239 -1239
  47. package/defaultTemplate/api/src/services/sqlstring.jsx +240 -240
  48. package/defaultTemplate/api/src/tasks/export.jsx +366 -366
  49. package/defaultTemplate/api/src/tasks/exportDoc.jsx +99 -99
  50. package/defaultTemplate/api/src/tasks/exportExTask.jsx +332 -332
  51. package/defaultTemplate/api/src/tasks/exportWithTemplateTask.jsx +128 -128
  52. package/defaultTemplate/api/src/tasks/exportZip.jsx +49 -49
  53. package/examples/buildProperties/build.properties +2 -2
  54. package/examples/gitignore/gitignore_example.txt +1 -1
  55. package/examples/models/product.json +52 -52
  56. package/examples/models/shop.json +71 -71
  57. package/examples/models/sku.json +254 -254
  58. package/examples/models/user.json +49 -49
  59. package/examples/owlconfig.json +13 -13
  60. package/package.json +33 -33
  61. package/todo.txt +4 -4
@@ -1,786 +1,787 @@
1
- //#import session.js
2
- //#import $owl_backend_session:services/modelService.jsx
3
- //#import $owlPermission:services/permissionService.jsx
4
- //#import $owl_orgs:services/modelService.jsx
5
- //#import $owl_permission:services/modelService.jsx
6
- //#import $owl_mall_u:services/modelService.jsx
7
-
8
- function getParentOrgIds(orgId) {
9
- if (orgId == '0') {
10
- return ['0'];
11
- }
12
-
13
- var org = owl_orgsService.get(orgId);
14
- if (org) {
15
- return org.parentPathIds;
16
- }
17
- return [orgId];
18
- }
19
-
20
- function checklogin() {
21
- var magic = $.getSystemProperty("magic");
22
- var magicParams = $.params.ma;
23
- var m = '0';//默认是 平台
24
- if (magic === magicParams) {
25
- //代表是内部操作
26
- var user = {
27
- uid: 'internal',
28
- loginId: "internal",
29
- name: "系统内部访问",
30
- allowed_appIds: ["*"]
31
- }
32
-
33
- var env = {
34
- now: new Date().getTime(),
35
- loginUserId: 'internal',
36
- loginId: 'internal',
37
- loginUser:user,
38
- shopId: m,
39
- warehouseId: "",
40
- roleId: 'internal',
41
- orgId: 'internal',
42
- orgIds: 'internal',
43
- m: m
44
- }
45
- return env;
46
-
47
- } else {
48
- var isid = SessionService.getSessionId(request);
49
- var now = new Date().getTime();
50
- var sessionId = 'owl_backend_session_' + isid;
51
- var session = owl_backend_sessionService.get(sessionId);
52
- if (session && session.lastModified > now - 7 * 24 * 3600 * 1000) {
53
- var loginUserId = session.userId
54
- var roleId = session.roleId;
55
- var orgId = session.orgId;
56
- var orgIds = [orgId].concat(getParentOrgIds(orgId));
57
- if (loginUserId) {
58
- var loginUser = owl_mall_uService.get(loginUserId);
59
- var env = {
60
- now: new Date().getTime(),
61
- loginUserId: loginUserId,
62
- loginId: loginUserId,
63
- loginUser:loginUser,
64
- shopId: m,
65
- warehouseId: "",
66
- roleId: roleId,
67
- orgId: orgId,
68
- orgIds: orgIds,
69
- m: m
70
- }
71
- return env;
72
- } else {
73
- var ret = {
74
- state: 'err',
75
- code: 'no login',
76
- msg: "not login!"
77
- }
78
- out.print(JSON.stringify(ret));
79
- return null;
80
- }
81
- } else {
82
- var ret = {
83
- state: 'err',
84
- code: 'no login',
85
- msg: "not login!"
86
- }
87
- out.print(JSON.stringify(ret));
88
- return null;
89
- }
90
- }
91
- }
92
-
93
- function getPermissions(roleId, tableId) {
94
- var searchArgs = {
95
- roleId: roleId,
96
- tables:{
97
- type:"or",
98
- args:[
99
- { "tables.tableId": tableId},
100
- { "tables.tableId": "all"}
101
- ]
102
- }
103
- }
104
- var sr = owl_permissionService.search("0", searchArgs, null, 0, 10000, null);
105
- if (sr.state === 'ok') {
106
- return sr.list;
107
- }
108
- return [];
109
- }
110
-
111
- function expandTablePermission(permissions) {
112
- // $.log("expandTablePermission,permissions=" + JSON.stringify(per?missions))
113
- var same_org = {};
114
-
115
- var sub_org = { };
116
-
117
- for (var i = 0; i < permissions.length; i++) {
118
- var p = permissions[i];
119
- if(same_org.read!='denied' && p.permission_same_org && p.permission_same_org.read && p.permission_same_org.read!='noset'){
120
- same_org.read = p.permission_same_org.read;
121
- }
122
- if(same_org.update!='denied' && p.permission_same_org && p.permission_same_org.update && p.permission_same_org.update!='noset'){
123
- same_org.update = p.permission_same_org.update;
124
- }
125
- if(same_org.del!='denied' && p.permission_same_org && p.permission_same_org.del && p.permission_same_org.del!='noset'){
126
- same_org.del = p.permission_same_org.del;
127
- }
128
- if(same_org.add!='denied' && p.permission_same_org && p.permission_same_org.add && p.permission_same_org.add!='noset'){
129
- same_org.add = p.permission_same_org.add;
130
- }
131
- if(same_org.list!='denied' && p.permission_same_org && p.permission_same_org.list && p.permission_same_org.list!='noset'){
132
- same_org.list = p.permission_same_org.add;
133
- }
134
- if(same_org.listall!='denied' && p.permission_same_org && p.permission_same_org.listall && p.permission_same_org.listall!='noset'){
135
- same_org.listall = p.permission_same_org.listall;
136
- }
137
-
138
- if(sub_org.read!='denied' && p.permission_sub_org && p.permission_sub_org.read && p.permission_sub_org.read!='noset'){
139
- sub_org.read = p.permission_sub_org.read;
140
- }
141
- if(sub_org.update!='denied' && p.permission_sub_org && p.permission_sub_org.update && p.permission_sub_org.update!='noset'){
142
- sub_org.update = p.permission_sub_org.update;
143
- }
144
- if(sub_org.del!='denied' && p.permission_sub_org && p.permission_sub_org.del && p.permission_sub_org.del!='noset'){
145
- same_org.del = p.permission_sub_org.del;
146
- }
147
- if(sub_org.add!='denied' && p.permission_sub_org && p.permission_sub_org.add && p.permission_sub_org.add!='noset'){
148
- sub_org.add = p.permission_sub_org.add;
149
- }
150
- if(sub_org.list!='denied' && p.permission_sub_org && p.permission_sub_org.list && p.permission_sub_org.list!='noset'){
151
- sub_org.list = p.permission_sub_org.list;
152
- }
153
- if(sub_org.listall!='denied' && p.permission_sub_org && p.permission_sub_org.listall && p.permission_sub_org.listall!='noset'){
154
- sub_org.listall = p.permission_sub_org.listall;
155
- }
156
- }
157
-
158
- return {
159
- same_org:same_org,
160
- sub_org:sub_org
161
- }
162
-
163
- }
164
-
165
- function expandSectionPermission(permissions) {
166
- var same_org = {
167
- "*": "allowed"
168
- };
169
- var sub_org = {
170
- "*": "allowed"
171
- };
172
-
173
- for (var i = 0; i < permissions.length; i++) {
174
- var p = permissions[i];
175
- var sections_same_org = p.sections_same_org;
176
- var sections_sub_org = p.sections_sub_org;
177
- if (sections_same_org) {
178
- for (var j = 0; j < sections_same_org.length; j++) {
179
- var sec = sections_same_org[j];
180
- if (sec.sectionKey) {
181
- same_org[sec.sectionKey] = sec;
182
- }
183
- }
184
- }
185
- if (sections_sub_org) {
186
- for (var j = 0; j < sections_sub_org.length; j++) {
187
- var sec = sections_sub_org[j];
188
- if (sec.sectionKey) {
189
- sub_org[sec.sectionKey] = sec;
190
- }
191
- }
192
- }
193
- }
194
-
195
- return {
196
- same_org: same_org,
197
- sub_org: sub_org
198
- }
199
- }
200
-
201
- function expandFieldPermission(permissions) {
202
- var same_org = {
203
- "*": {read: "allowed"}
204
- }
205
- var sub_org = {
206
- "*": {read: "allowed"}
207
- }
208
- for (var i = 0; i < permissions.length; i++) {
209
- var p = permissions[i];
210
- if (p.fields_same_org) {
211
- for (var j = 0; j < p.fields_same_org.length; j++) {
212
- var f = p.fields_same_org[j];
213
- var fieldKey = f.fieldKey;
214
- if (f.sectionKey && f.sectionKey != 'main') {
215
- fieldKey = f.sectionKey + "." + f.fieldKey;
216
- }
217
- same_org[fieldKey] = f;
218
- }
219
- }
220
- if (p.fields_sub_org) {
221
- for (var j = 0; j < p.fields_sub_org.length; j++) {
222
- var f = p.fields_sub_org[j];
223
- var fieldKey = f.fieldKey;
224
- if (f.sectionKey && f.sectionKey != 'main') {
225
- fieldKey = f.sectionKey + "." + f.fieldKey;
226
- }
227
- sub_org[fieldKey] = f;
228
- }
229
- }
230
- }
231
- return {
232
- same_org: same_org,
233
- sub_org: sub_org
234
- }
235
- }
236
-
237
- function checkObject(obj, ef_field_permissions, parentKey,action){
238
- for(var k in obj){
239
- var ek = parentKey + "." + k;
240
- if(ef_field_permissions && ef_field_permissions[ek] && ef_field_permissions[ek][action]==='denied'){
241
- throw "没有"+action + "权限,ek=" + ek;
242
- }
243
-
244
- }
245
- }
246
-
247
- function isSubOrg(data, orgId){
248
- if(orgId == '0'){
249
- return true;
250
- }
251
- var org = owl_orgsService.get(data._orgId);
252
- if(!org || !org.parentPathIds){
253
- return false;
254
- }
255
- if(org.parentPathIds.indexOf(orgId)>-1){
256
- return true;
257
- }
258
- return false;
259
- }
260
-
261
- function checkPermission(data, permissions, orgId, action) {
262
- var section_permissions = expandSectionPermission(permissions);
263
- var field_permissions = expandFieldPermission(permissions);
264
- var table_permissions = expandTablePermission(permissions);
265
-
266
- var ef_section_permissions = null;
267
- var ef_field_permissions = null;
268
- var ef_table_permissions = null;
269
- if (data._orgId === orgId) {
270
- ef_section_permissions = section_permissions.same_org;
271
- ef_field_permissions = field_permissions.same_org;
272
- ef_table_permissions = table_permissions.same_org;
273
- } else {
274
- if(isSubOrg(data,orgId)) {
275
- ef_section_permissions = section_permissions.sub_org;
276
- ef_field_permissions = field_permissions.sub_org;
277
- ef_table_permissions = field_permissions.sub_org;
278
- }
279
- }
280
-
281
- if(!ef_table_permissions){
282
- throw "表没有权限。"
283
- }
284
- var valid_fields = ['_orgId', '_orgIds', "_v", "del"];
285
- if(ef_table_permissions.add !== 'allowed' && action==='add'){
286
- throw "表没有添加记录权限。"
287
- }
288
- if(ef_table_permissions.del !== 'allowed' && action==='del'){
289
- throw "表没有删除记录权限。"
290
- }
291
- if(ef_table_permissions.update !== 'allowed' && action==='update'){
292
- throw "表没有删除记录权限。"
293
- }
294
- if(ef_table_permissions.read !== 'read' && action==='read'){
295
- throw "表没有读取权限。"
296
- }
297
- if(ef_table_permissions.list !== 'read' && action==='list'){
298
- throw "表没有列出权限。"
299
- }
300
- //检查section_permission
301
- for (var k in data) {
302
- if(valid_fields.indexOf(k)>-1){
303
- continue;
304
- }
305
- var v = data[k];
306
- //if v is section
307
- if (typeof v === 'object') {
308
- //ef_field_permissions
309
- if (ef_section_permissions && ef_section_permissions[k] && ef_section_permissions[k][action] === 'denied') {
310
- throw "section没有" + action + "权限,sectionKey=" + k
311
- }
312
- if(Array.isArray(v)){
313
- for(var i=0; i<v.length; i++){
314
- var r = v[i];
315
- checkObject(r,ef_field_permissions,k,action);
316
- }
317
- }
318
- else{
319
- checkObject(v,ef_field_permissions,k,action);
320
- }
321
- }
322
- else {
323
- if(ef_section_permissions && ef_section_permissions[k] && ef_field_permissions[k].add === 'denied'){
324
- throw "字段没有" + action + "权限, key=" + k
325
- }
326
- }
327
-
328
- }
329
- }
330
-
331
- function checkUpdatePermission(data,diffresult,permissions,orgId){
332
- var section_permissions = expandSectionPermission(permissions);
333
- var field_permissions = expandFieldPermission(permissions);
334
- var table_permissions = expandTablePermission(permissions);
335
-
336
- var ef_section_permissions = null;
337
- var ef_field_permissions = null;
338
- var ef_table_permissions = null;
339
- if (data._orgId === orgId) {
340
- ef_section_permissions = section_permissions.same_org;
341
- ef_field_permissions = field_permissions.same_org;
342
- ef_table_permissions = table_permissions.same_org;
343
- } else {
344
- if(isSubOrg(data,orgId)) {
345
- ef_section_permissions = section_permissions.sub_org;
346
- ef_field_permissions = field_permissions.sub_org;
347
- ef_table_permissions = field_permissions.sub_org;
348
- }
349
- }
350
-
351
- // $.log("ef_table_permissions=" + JSON.stringify(ef_table_permissions))
352
- if(!ef_table_permissions){
353
- throw "表没有权限。"
354
- }
355
- if(ef_table_permissions.update === 'denied'){
356
- throw "没有修改的权限。"
357
- }
358
- if(diffresult && diffresult.length>0){
359
- for(var i=0; i<diffresult.length; i++){
360
- var r = diffresult[i];
361
- var pk = "main";
362
- if(r.parentKey && r.parentKey.length>0){
363
- pk = r.parentKey.substring(1);
364
- if(ef_section_permissions[pk] && ef_section_permissions[pk].update ==='denied'){
365
- throw "没有修改的权限,sectionKey=" + r.parentKey
366
- }
367
-
368
- }
369
- var rk = pk + "." + r.fieldKey;
370
- if(ef_field_permissions[rk] && ef_field_permissions[rk].update ==='denied' ){
371
- throw "没有修改字段的权限,fieldKey=" + rk;
372
- }
373
-
374
- }
375
- }
376
- //啥都不做代表检查通过
377
- //TODO:检查用户权限
378
- }
379
-
380
- function filterFields(data, permissions, orgId) {
381
- //根据权限,将没有读权限的字段删除掉
382
- var section_permissions = expandSectionPermission(permissions);
383
- var field_permissions = expandFieldPermission(permissions);
384
- var ef_section_permissions = null;
385
- var ef_field_permissions = null;
386
- if (data._orgId === orgId) {
387
- ef_section_permissions = section_permissions.same_org;
388
- ef_field_permissions = field_permissions.same_org;
389
- } else {
390
- ef_section_permissions = section_permissions.sub_org;
391
- ef_field_permissions = field_permissions.sub_org;
392
- }
393
-
394
- var invisibleFields = [];
395
- data['invisibleFields'] = invisibleFields;
396
-
397
- var valid_fields = ['_orgId', '_orgIds', "_v", "del"];
398
- var curSectionKey = '';
399
- for (var k in data) {
400
- if (valid_fields.indexOf(k) >= 0) {
401
- continue;
402
- } else {
403
- if (typeof data[k] === 'object') {
404
- if ((ef_section_permissions[k] && ef_section_permissions[k].read === 'denied') ||
405
- ((!ef_section_permissions[k] || !ef_section_permissions[k].read) && (ef_section_permissions["*"] && ef_section_permissions["*"].read === 'denied'))) {
406
- delete data[k];
407
- invisibleFields.push(k);
408
- }
409
- var section = data[k];
410
- if (Array.isArray(section)) {
411
- for (var i = 0; i < section.length; i++) {
412
- var r = section[i];
413
- for (var fk in r) {
414
- var rk = k + "." + fk;
415
- if ((ef_field_permissions[rk] && ef_field_permissions[rk].read === 'denied') ||
416
- ((!ef_field_permissions[rk] || !ef_field_permissions[rk].read) && (ef_field_permissions[k + ".*"] && ef_field_permissions[k + ".*"].read === 'denied'))) {
417
- delete r[fk];
418
- invisibleFields.push(rk);
419
- }
420
- }
421
-
422
- }
423
- }
424
- } else {
425
- if ((ef_field_permissions[k] && ef_field_permissions[k].read === 'denied') || ((!ef_field_permissions[k] || !ef_field_permissions[k].read) && ef_field_permissions["*"].read === 'denied')) {
426
- delete data[k];
427
- invisibleFields.push(k);
428
- }
429
- }
430
- }
431
- }
432
- }
433
-
434
- function mergeArray(a1, a2,section_permission){
435
- //a1是旧的,a2是新的
436
- // $.log("diffArray,parentKey=" + parentKey);
437
-
438
- var temp_matched = [];
439
- var result = [];
440
- var merged = [];
441
- if(!a1){
442
- a1 = [];
443
- }
444
- if(!a2){
445
- a2 = [];
446
- }
447
- var newa2 = [];
448
- for(var i=0; i<a2.length; i++){
449
- if(a2[i]!==null){
450
- if(!isScalar(a2[i])){
451
- delete a2[i]._matched;
452
- }
453
- newa2.push(a2[i]);
454
- }
455
- }
456
- a2 = newa2;
457
- for(var i=0; i<a1.length; i++){
458
- var r1 = a1[i];
459
- var found = false;
460
- for(var j=0; j<a2.length; j++){
461
- var r2 = a2[j];
462
- if(isEqual(r1,r2)){
463
- found = true;
464
- if(isScalar(r2)){
465
- temp_matched.push(r2);
466
- }
467
- else{
468
- if(r2!=null){
469
- r2._matched = true;
470
- }
471
-
472
- }
473
- merged.push(r1);
474
- break;
475
- }
476
- }
477
- if(!found){
478
- //r1不存在于a2中,说明r1被删除了
479
- if(section_permission && section_permission.del === 'denied'){
480
- //不允许删除
481
- merged.push(r1);
482
- }
483
- }
484
- }
485
- for(var i=0; i<a2.length; i++){
486
- r2 = a2[i];
487
- if(isScalar(r2)){
488
- if(temp_matched.indexOf(r2)==-1){
489
- if(!section_permission || section_permission.add !== 'denied' ){
490
- merged.push(r2);
491
- }
492
- }
493
-
494
- }
495
- else if(!r2._matched){
496
- if(!section_permission || section_permission.add !== 'denied' ){
497
- merged.push(r2);
498
- }
499
- }
500
- }
501
- return merged;
502
- }
503
-
504
- function merge(oldObj,newObj,permissions,orgId){
505
- var section_permissions = expandSectionPermission(permissions);
506
- var field_permissions = expandFieldPermission(permissions);
507
- var table_permissions = expandTablePermission(permissions);
508
-
509
- var ef_section_permissions = null;
510
- var ef_field_permissions = null;
511
- var ef_table_permissions = null;
512
- if (oldObj._orgId === orgId) {
513
- ef_section_permissions = section_permissions.same_org;
514
- ef_field_permissions = field_permissions.same_org;
515
- ef_table_permissions = table_permissions.same_org;
516
- } else {
517
- ef_section_permissions = section_permissions.sub_org;
518
- ef_field_permissions = field_permissions.sub_org;
519
- ef_table_permissions = table_permissions.sub_org;
520
- }
521
- if(ef_table_permissions && ef_table_permissions.update==='denied'){
522
- throw "没有修改权限。"
523
- }
524
-
525
- for(var k in oldObj){
526
- var vo = oldObj[k];
527
- if(typeof vo === 'object'){
528
- if(ef_section_permissions[k] && ef_section_permissions[k].update==='denied' || ef_section_permissions[k] && ef_section_permissions[k].read==='denied'){
529
- newObj[k] = vo;
530
- continue;
531
- }
532
-
533
- if(Array.isArray(vo)){
534
- //暂时对于Array, 只要对于section有权限,则是对于整行来说的,而不能对于行中的某个字段
535
- var vn = newObj[k];
536
- var merged = mergeArray(vo,vn,ef_section_permissions[k]);
537
- newObj[k] = merged;
538
- }
539
- else {
540
- var vn = newObj[k];
541
- for(var sk in vo){
542
- var fk = k + "." + sk;
543
- if(ef_field_permissions[fk] && ef_field_permissions[fk].update==='denied' || ef_field_permissions[fk] && ef_field_permissions[fk].read==='denied'){
544
- vn[fk] = vo[fk];
545
- }
546
- }
547
- }
548
- }
549
- else if(vo === null){
550
- if((ef_section_permissions[k] && (ef_section_permissions[k].update==='denied' || ef_section_permissions[k].read==='denied') )||
551
- (ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') )
552
- ){
553
- newObj[k] = null;
554
- }
555
- }
556
- else{
557
- if(ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') ){
558
- newObj[k] = oldObj[k];
559
- }
560
- }
561
- }
562
-
563
- for(var k in newObj){
564
- //找到在new 但是 不在 old里面的,这表明是add
565
- var vn = newObj[k];
566
- var vo = oldObj[k];
567
- if(typeof vn === 'object' ){
568
-
569
- if(!vo && ef_section_permissions[k] && ef_section_permissions[k].add === 'denied'){
570
- delete newObj[k];
571
- }
572
- else if(Array.isArray(vn)){
573
- //do nothing
574
- }
575
- else{
576
- for(var nk in vn){
577
- if(vn[nk] && (!vo || !vo[nk])){
578
- var fk = k + "." + nk;
579
- if(ef_field_permissions[fk] && ef_field_permissions[fk].add === 'denied'){
580
- delete vn[nk];
581
- }
582
- }
583
- }
584
- }
585
- }
586
- else{
587
- if(!vo && ef_field_permissions[k] && ef_field_permissions[k].add === 'denied'){
588
- delete newObj[k];
589
- }
590
- }
591
- }
592
- return newObj;
593
-
594
- }
595
-
596
- function getObjectPermissionFilter(tableId, roleId,orgId,userId){
597
- var filters = [];
598
- var excludeFilters = [];
599
-
600
- filters = [
601
- {
602
- bool: {
603
- filter:[
604
- {term:{"permissions.orgId.keyword":orgId}},
605
- {term:{"permissions.roleId.keyword":roleId}},
606
- {term:{"permissions.list.keyword":"allowed"}}
607
- ]
608
- }
609
- },
610
- {
611
- bool: {
612
- filter:[
613
- {term:{"permissions.orgId.keyword":orgId}},
614
- {term:{"permissions.roleId.keyword":"*"}},
615
- {term:{"permissions.list.keyword":"allowed"}}
616
- ]
617
- }
618
- },
619
- {
620
- bool: {
621
- filter:[
622
- {term:{"permissions.orgId.keyword":"*"}},
623
- {term:{"permissions.roleId.keyword":roleId}},
624
- {term:{"permissions.list.keyword":"allowed"}}
625
- ]
626
- }
627
- },
628
- {
629
- bool: {
630
- filter:[
631
- {term:{"permissions.orgId.keyword":"*"}},
632
- {term:{"permissions.roleId.keyword":"*"}},
633
- {term:{"permissions.list.keyword":"allowed"}}
634
- ]
635
- }
636
- },
637
- {
638
- bool: {
639
- filter:[
640
- {term:{"permissions.userId.keyword":userId}},
641
- {term:{"permissions.list.keyword":"allowed"}}
642
- ]
643
- }
644
- },
645
- {
646
- bool: {
647
- filter:[
648
- {term:{"permissions.userId.keyword":"*"}},
649
- {term:{"permissions.list.keyword":"allowed"}}
650
- ]
651
- }
652
- }
653
- ];
654
- //获取对象本身的权限
655
-
656
- excludeFilters= [
657
- {
658
- bool: {
659
- filter:[
660
- {term:{"permissions.orgId.keyword":orgId}},
661
- {term:{"permissions.roleId.keyword":roleId}},
662
- {term:{"permissions.list.keyword":"denied"}}
663
- ]
664
- }
665
- },
666
- {
667
- bool: {
668
- filter:[
669
- {term:{"permissions.orgId.keyword":orgId}},
670
- {term:{"permissions.roleId.keyword":"*"}},
671
- {term:{"permissions.list.keyword":"denied"}}
672
- ]
673
- }
674
- },
675
- {
676
- bool: {
677
- filter:[
678
- {term:{"permissions.orgId.keyword":"*"}},
679
- {term:{"permissions.roleId.keyword":roleId}},
680
- {term:{"permissions.list.keyword":"denied"}}
681
- ]
682
- }
683
- },
684
- {
685
- bool: {
686
- filter:[
687
- {term:{"permissions.orgId.keyword":"*"}},
688
- {term:{"permissions.roleId.keyword":"*"}},
689
- {term:{"permissions.list.keyword":"denied"}}
690
- ]
691
- }
692
- },
693
- {
694
- bool: {
695
- filter:[
696
- {term:{"permissions.userId.keyword":userId}},
697
- {term:{"permissions.list.keyword":"denied"}}
698
- ]
699
- }
700
- },
701
- {
702
- bool: {
703
- filter:[
704
- {term:{"permissions.userId.keyword":"*"}},
705
- {term:{"permissions.list.keyword":"denied"}}
706
- ]
707
- }
708
- }
709
- ];
710
- return [filters,excludeFilters]
711
- }
712
- function getListPermissionFilter(tableId, roleId,orgId,userId, permissions){
713
- if(userId==='0' && orgId==='0' && roleId==='0'){
714
- return null;
715
- }
716
-
717
- // $.log("getListPermissionFilter tableId="+tableId+",roleId="+roleId+",orgId="+orgId+",userId="+userId+", permissions="+JSON.stringify(permissions));
718
- //获得有权限的对象的filter
719
- var tp = expandTablePermission(permissions);
720
-
721
-
722
- //如果有listAll
723
-
724
- if(tp.same_org.listall==='allowed' || tp.sub_org.listall==='allowed' || roleId=='0' || userId=='0') {
725
- //只能读取本组织的数据
726
- // var objFilters = getObjectPermissionFilter(tableId, roleId,orgId,userId, permissions);
727
- var orgFilter = null;
728
- if(tp.sub_org.listall==='allowed'){
729
- if(orgId!='0'){
730
- orgFilter = {
731
- "term": {"_orgIds.keyword": orgId}
732
- }
733
- }
734
- else{
735
- orgFilter = { "match_all": {}};
736
- }
737
- }
738
- else if(tp.same_org.listall==='allowed'){
739
- if(orgId!='0'){
740
- orgFilter = {
741
- "term": {"_orgId.keyword": orgId}
742
- }
743
- }
744
- else{
745
- orgFilter = { "match_all": {}};
746
- }
747
-
748
- }
749
- else {
750
- if(orgId!='0'){
751
- orgFilter = {
752
- "term": {"_orgIds.keyword": orgId}
753
- }
754
- }
755
- else{
756
- orgFilter = { "match_all": {}};
757
- }
758
- }
759
- var shouldFilters = [];
760
- if(orgFilter){
761
- shouldFilters.push(orgFilter);
762
- }
763
- //组合对象允许的
764
- return {
765
- bool:{
766
- should:shouldFilters
767
- }
768
- }
769
- }
770
- else {
771
- var objFilters = getObjectPermissionFilter(tableId, roleId,orgId,userId, permissions);
772
- return {
773
- bool:{
774
- should:objFilters[0],
775
- must_not:objFilters[1]
776
- }
777
- }
778
- }
779
-
780
-
781
- }
782
-
783
-
784
-
785
-
786
-
1
+ //#import session.js
2
+ //#import $owl_backend_session:services/modelService.jsx
3
+ //#import $owlPermission:services/permissionService.jsx
4
+ //#import $owl_orgs:services/modelService.jsx
5
+ //#import $owl_permission:services/modelService.jsx
6
+ //#import $owl_mall_u:services/modelService.jsx
7
+
8
+ function getParentOrgIds(orgId) {
9
+ if (orgId == '0') {
10
+ return ['0'];
11
+ }
12
+
13
+ var org = owl_orgsService.get(orgId);
14
+ if (org) {
15
+ return org.parentPathIds;
16
+ }
17
+ return [orgId];
18
+ }
19
+
20
+ function checklogin() {
21
+ var magic = $.getSystemProperty("magic");
22
+ var magicParams = $.params.ma;
23
+ var m = '0';//默认是 平台
24
+ if (magic === magicParams) {
25
+ //代表是内部操作
26
+ var user = {
27
+ uid: 'internal',
28
+ loginId: "internal",
29
+ name: "系统内部访问",
30
+ allowed_appIds: ["*"]
31
+ }
32
+
33
+ var env = {
34
+ now: new Date().getTime(),
35
+ loginUserId: 'internal',
36
+ loginId: 'internal',
37
+ loginUser:user,
38
+ shopId: m,
39
+ warehouseId: "",
40
+ roleId: 'internal',
41
+ orgId: 'internal',
42
+ orgIds: 'internal',
43
+ m: m
44
+ }
45
+ return env;
46
+
47
+ } else {
48
+ var params = JSON.parse($body);
49
+ var isid = SessionService.getSessionId(request);
50
+ var now = new Date().getTime();
51
+ var sessionId = 'owl_backend_session_' + isid;
52
+ var session = owl_backend_sessionService.get(sessionId);
53
+ if (session && session.lastModified > now - 7 * 24 * 3600 * 1000) {
54
+ var loginUserId = session.userId
55
+ var roleId = params.rroleId || session.roleId;
56
+ var orgId = params.rorgId || session.orgId;
57
+ var orgIds = [orgId].concat(getParentOrgIds(orgId));
58
+ if (loginUserId) {
59
+ var loginUser = owl_mall_uService.get(loginUserId);
60
+ var env = {
61
+ now: new Date().getTime(),
62
+ loginUserId: loginUserId,
63
+ loginId: loginUserId,
64
+ loginUser:loginUser,
65
+ shopId: m,
66
+ warehouseId: "",
67
+ roleId: roleId,
68
+ orgId: orgId,
69
+ orgIds: orgIds,
70
+ m: m
71
+ }
72
+ return env;
73
+ } else {
74
+ var ret = {
75
+ state: 'err',
76
+ code: 'no login',
77
+ msg: "not login!"
78
+ }
79
+ out.print(JSON.stringify(ret));
80
+ return null;
81
+ }
82
+ } else {
83
+ var ret = {
84
+ state: 'err',
85
+ code: 'no login',
86
+ msg: "not login!"
87
+ }
88
+ out.print(JSON.stringify(ret));
89
+ return null;
90
+ }
91
+ }
92
+ }
93
+
94
+ function getPermissions(roleId, tableId) {
95
+ var searchArgs = {
96
+ roleId: roleId,
97
+ tables:{
98
+ type:"or",
99
+ args:[
100
+ { "tables.tableId": tableId},
101
+ { "tables.tableId": "all"}
102
+ ]
103
+ }
104
+ }
105
+ var sr = owl_permissionService.search("0", searchArgs, null, 0, 10000, null);
106
+ if (sr.state === 'ok') {
107
+ return sr.list;
108
+ }
109
+ return [];
110
+ }
111
+
112
+ function expandTablePermission(permissions) {
113
+ // $.log("expandTablePermission,permissions=" + JSON.stringify(per?missions))
114
+ var same_org = {};
115
+
116
+ var sub_org = { };
117
+
118
+ for (var i = 0; i < permissions.length; i++) {
119
+ var p = permissions[i];
120
+ if(same_org.read!='denied' && p.permission_same_org && p.permission_same_org.read && p.permission_same_org.read!='noset'){
121
+ same_org.read = p.permission_same_org.read;
122
+ }
123
+ if(same_org.update!='denied' && p.permission_same_org && p.permission_same_org.update && p.permission_same_org.update!='noset'){
124
+ same_org.update = p.permission_same_org.update;
125
+ }
126
+ if(same_org.del!='denied' && p.permission_same_org && p.permission_same_org.del && p.permission_same_org.del!='noset'){
127
+ same_org.del = p.permission_same_org.del;
128
+ }
129
+ if(same_org.add!='denied' && p.permission_same_org && p.permission_same_org.add && p.permission_same_org.add!='noset'){
130
+ same_org.add = p.permission_same_org.add;
131
+ }
132
+ if(same_org.list!='denied' && p.permission_same_org && p.permission_same_org.list && p.permission_same_org.list!='noset'){
133
+ same_org.list = p.permission_same_org.add;
134
+ }
135
+ if(same_org.listall!='denied' && p.permission_same_org && p.permission_same_org.listall && p.permission_same_org.listall!='noset'){
136
+ same_org.listall = p.permission_same_org.listall;
137
+ }
138
+
139
+ if(sub_org.read!='denied' && p.permission_sub_org && p.permission_sub_org.read && p.permission_sub_org.read!='noset'){
140
+ sub_org.read = p.permission_sub_org.read;
141
+ }
142
+ if(sub_org.update!='denied' && p.permission_sub_org && p.permission_sub_org.update && p.permission_sub_org.update!='noset'){
143
+ sub_org.update = p.permission_sub_org.update;
144
+ }
145
+ if(sub_org.del!='denied' && p.permission_sub_org && p.permission_sub_org.del && p.permission_sub_org.del!='noset'){
146
+ same_org.del = p.permission_sub_org.del;
147
+ }
148
+ if(sub_org.add!='denied' && p.permission_sub_org && p.permission_sub_org.add && p.permission_sub_org.add!='noset'){
149
+ sub_org.add = p.permission_sub_org.add;
150
+ }
151
+ if(sub_org.list!='denied' && p.permission_sub_org && p.permission_sub_org.list && p.permission_sub_org.list!='noset'){
152
+ sub_org.list = p.permission_sub_org.list;
153
+ }
154
+ if(sub_org.listall!='denied' && p.permission_sub_org && p.permission_sub_org.listall && p.permission_sub_org.listall!='noset'){
155
+ sub_org.listall = p.permission_sub_org.listall;
156
+ }
157
+ }
158
+
159
+ return {
160
+ same_org:same_org,
161
+ sub_org:sub_org
162
+ }
163
+
164
+ }
165
+
166
+ function expandSectionPermission(permissions) {
167
+ var same_org = {
168
+ "*": "allowed"
169
+ };
170
+ var sub_org = {
171
+ "*": "allowed"
172
+ };
173
+
174
+ for (var i = 0; i < permissions.length; i++) {
175
+ var p = permissions[i];
176
+ var sections_same_org = p.sections_same_org;
177
+ var sections_sub_org = p.sections_sub_org;
178
+ if (sections_same_org) {
179
+ for (var j = 0; j < sections_same_org.length; j++) {
180
+ var sec = sections_same_org[j];
181
+ if (sec.sectionKey) {
182
+ same_org[sec.sectionKey] = sec;
183
+ }
184
+ }
185
+ }
186
+ if (sections_sub_org) {
187
+ for (var j = 0; j < sections_sub_org.length; j++) {
188
+ var sec = sections_sub_org[j];
189
+ if (sec.sectionKey) {
190
+ sub_org[sec.sectionKey] = sec;
191
+ }
192
+ }
193
+ }
194
+ }
195
+
196
+ return {
197
+ same_org: same_org,
198
+ sub_org: sub_org
199
+ }
200
+ }
201
+
202
+ function expandFieldPermission(permissions) {
203
+ var same_org = {
204
+ "*": {read: "allowed"}
205
+ }
206
+ var sub_org = {
207
+ "*": {read: "allowed"}
208
+ }
209
+ for (var i = 0; i < permissions.length; i++) {
210
+ var p = permissions[i];
211
+ if (p.fields_same_org) {
212
+ for (var j = 0; j < p.fields_same_org.length; j++) {
213
+ var f = p.fields_same_org[j];
214
+ var fieldKey = f.fieldKey;
215
+ if (f.sectionKey && f.sectionKey != 'main') {
216
+ fieldKey = f.sectionKey + "." + f.fieldKey;
217
+ }
218
+ same_org[fieldKey] = f;
219
+ }
220
+ }
221
+ if (p.fields_sub_org) {
222
+ for (var j = 0; j < p.fields_sub_org.length; j++) {
223
+ var f = p.fields_sub_org[j];
224
+ var fieldKey = f.fieldKey;
225
+ if (f.sectionKey && f.sectionKey != 'main') {
226
+ fieldKey = f.sectionKey + "." + f.fieldKey;
227
+ }
228
+ sub_org[fieldKey] = f;
229
+ }
230
+ }
231
+ }
232
+ return {
233
+ same_org: same_org,
234
+ sub_org: sub_org
235
+ }
236
+ }
237
+
238
+ function checkObject(obj, ef_field_permissions, parentKey,action){
239
+ for(var k in obj){
240
+ var ek = parentKey + "." + k;
241
+ if(ef_field_permissions && ef_field_permissions[ek] && ef_field_permissions[ek][action]==='denied'){
242
+ throw "没有"+action + "权限,ek=" + ek;
243
+ }
244
+
245
+ }
246
+ }
247
+
248
+ function isSubOrg(data, orgId){
249
+ if(orgId == '0'){
250
+ return true;
251
+ }
252
+ var org = owl_orgsService.get(data._orgId);
253
+ if(!org || !org.parentPathIds){
254
+ return false;
255
+ }
256
+ if(org.parentPathIds.indexOf(orgId)>-1){
257
+ return true;
258
+ }
259
+ return false;
260
+ }
261
+
262
+ function checkPermission(data, permissions, orgId, action) {
263
+ var section_permissions = expandSectionPermission(permissions);
264
+ var field_permissions = expandFieldPermission(permissions);
265
+ var table_permissions = expandTablePermission(permissions);
266
+
267
+ var ef_section_permissions = null;
268
+ var ef_field_permissions = null;
269
+ var ef_table_permissions = null;
270
+ if (data._orgId === orgId) {
271
+ ef_section_permissions = section_permissions.same_org;
272
+ ef_field_permissions = field_permissions.same_org;
273
+ ef_table_permissions = table_permissions.same_org;
274
+ } else {
275
+ if(isSubOrg(data,orgId)) {
276
+ ef_section_permissions = section_permissions.sub_org;
277
+ ef_field_permissions = field_permissions.sub_org;
278
+ ef_table_permissions = field_permissions.sub_org;
279
+ }
280
+ }
281
+
282
+ if(!ef_table_permissions){
283
+ throw "表没有权限。"
284
+ }
285
+ var valid_fields = ['_orgId', '_orgIds', "_v", "del"];
286
+ if(ef_table_permissions.add !== 'allowed' && action==='add'){
287
+ throw "表没有添加记录权限。"
288
+ }
289
+ if(ef_table_permissions.del !== 'allowed' && action==='del'){
290
+ throw "表没有删除记录权限。"
291
+ }
292
+ if(ef_table_permissions.update !== 'allowed' && action==='update'){
293
+ throw "表没有删除记录权限。"
294
+ }
295
+ if(ef_table_permissions.read !== 'read' && action==='read'){
296
+ throw "表没有读取权限。"
297
+ }
298
+ if(ef_table_permissions.list !== 'read' && action==='list'){
299
+ throw "表没有列出权限。"
300
+ }
301
+ //检查section_permission
302
+ for (var k in data) {
303
+ if(valid_fields.indexOf(k)>-1){
304
+ continue;
305
+ }
306
+ var v = data[k];
307
+ //if v is section
308
+ if (typeof v === 'object') {
309
+ //ef_field_permissions
310
+ if (ef_section_permissions && ef_section_permissions[k] && ef_section_permissions[k][action] === 'denied') {
311
+ throw "section没有" + action + "权限,sectionKey=" + k
312
+ }
313
+ if(Array.isArray(v)){
314
+ for(var i=0; i<v.length; i++){
315
+ var r = v[i];
316
+ checkObject(r,ef_field_permissions,k,action);
317
+ }
318
+ }
319
+ else{
320
+ checkObject(v,ef_field_permissions,k,action);
321
+ }
322
+ }
323
+ else {
324
+ if(ef_section_permissions && ef_section_permissions[k] && ef_field_permissions[k].add === 'denied'){
325
+ throw "字段没有" + action + "权限, key=" + k
326
+ }
327
+ }
328
+
329
+ }
330
+ }
331
+
332
+ function checkUpdatePermission(data,diffresult,permissions,orgId){
333
+ var section_permissions = expandSectionPermission(permissions);
334
+ var field_permissions = expandFieldPermission(permissions);
335
+ var table_permissions = expandTablePermission(permissions);
336
+
337
+ var ef_section_permissions = null;
338
+ var ef_field_permissions = null;
339
+ var ef_table_permissions = null;
340
+ if (data._orgId === orgId) {
341
+ ef_section_permissions = section_permissions.same_org;
342
+ ef_field_permissions = field_permissions.same_org;
343
+ ef_table_permissions = table_permissions.same_org;
344
+ } else {
345
+ if(isSubOrg(data,orgId)) {
346
+ ef_section_permissions = section_permissions.sub_org;
347
+ ef_field_permissions = field_permissions.sub_org;
348
+ ef_table_permissions = field_permissions.sub_org;
349
+ }
350
+ }
351
+
352
+ // $.log("ef_table_permissions=" + JSON.stringify(ef_table_permissions))
353
+ if(!ef_table_permissions){
354
+ throw "表没有权限。"
355
+ }
356
+ if(ef_table_permissions.update === 'denied'){
357
+ throw "没有修改的权限。"
358
+ }
359
+ if(diffresult && diffresult.length>0){
360
+ for(var i=0; i<diffresult.length; i++){
361
+ var r = diffresult[i];
362
+ var pk = "main";
363
+ if(r.parentKey && r.parentKey.length>0){
364
+ pk = r.parentKey.substring(1);
365
+ if(ef_section_permissions[pk] && ef_section_permissions[pk].update ==='denied'){
366
+ throw "没有修改的权限,sectionKey=" + r.parentKey
367
+ }
368
+
369
+ }
370
+ var rk = pk + "." + r.fieldKey;
371
+ if(ef_field_permissions[rk] && ef_field_permissions[rk].update ==='denied' ){
372
+ throw "没有修改字段的权限,fieldKey=" + rk;
373
+ }
374
+
375
+ }
376
+ }
377
+ //啥都不做代表检查通过
378
+ //TODO:检查用户权限
379
+ }
380
+
381
+ function filterFields(data, permissions, orgId) {
382
+ //根据权限,将没有读权限的字段删除掉
383
+ var section_permissions = expandSectionPermission(permissions);
384
+ var field_permissions = expandFieldPermission(permissions);
385
+ var ef_section_permissions = null;
386
+ var ef_field_permissions = null;
387
+ if (data._orgId === orgId) {
388
+ ef_section_permissions = section_permissions.same_org;
389
+ ef_field_permissions = field_permissions.same_org;
390
+ } else {
391
+ ef_section_permissions = section_permissions.sub_org;
392
+ ef_field_permissions = field_permissions.sub_org;
393
+ }
394
+
395
+ var invisibleFields = [];
396
+ data['invisibleFields'] = invisibleFields;
397
+
398
+ var valid_fields = ['_orgId', '_orgIds', "_v", "del"];
399
+ var curSectionKey = '';
400
+ for (var k in data) {
401
+ if (valid_fields.indexOf(k) >= 0) {
402
+ continue;
403
+ } else {
404
+ if (typeof data[k] === 'object') {
405
+ if ((ef_section_permissions[k] && ef_section_permissions[k].read === 'denied') ||
406
+ ((!ef_section_permissions[k] || !ef_section_permissions[k].read) && (ef_section_permissions["*"] && ef_section_permissions["*"].read === 'denied'))) {
407
+ delete data[k];
408
+ invisibleFields.push(k);
409
+ }
410
+ var section = data[k];
411
+ if (Array.isArray(section)) {
412
+ for (var i = 0; i < section.length; i++) {
413
+ var r = section[i];
414
+ for (var fk in r) {
415
+ var rk = k + "." + fk;
416
+ if ((ef_field_permissions[rk] && ef_field_permissions[rk].read === 'denied') ||
417
+ ((!ef_field_permissions[rk] || !ef_field_permissions[rk].read) && (ef_field_permissions[k + ".*"] && ef_field_permissions[k + ".*"].read === 'denied'))) {
418
+ delete r[fk];
419
+ invisibleFields.push(rk);
420
+ }
421
+ }
422
+
423
+ }
424
+ }
425
+ } else {
426
+ if ((ef_field_permissions[k] && ef_field_permissions[k].read === 'denied') || ((!ef_field_permissions[k] || !ef_field_permissions[k].read) && ef_field_permissions["*"].read === 'denied')) {
427
+ delete data[k];
428
+ invisibleFields.push(k);
429
+ }
430
+ }
431
+ }
432
+ }
433
+ }
434
+
435
+ function mergeArray(a1, a2,section_permission){
436
+ //a1是旧的,a2是新的
437
+ // $.log("diffArray,parentKey=" + parentKey);
438
+
439
+ var temp_matched = [];
440
+ var result = [];
441
+ var merged = [];
442
+ if(!a1){
443
+ a1 = [];
444
+ }
445
+ if(!a2){
446
+ a2 = [];
447
+ }
448
+ var newa2 = [];
449
+ for(var i=0; i<a2.length; i++){
450
+ if(a2[i]!==null){
451
+ if(!isScalar(a2[i])){
452
+ delete a2[i]._matched;
453
+ }
454
+ newa2.push(a2[i]);
455
+ }
456
+ }
457
+ a2 = newa2;
458
+ for(var i=0; i<a1.length; i++){
459
+ var r1 = a1[i];
460
+ var found = false;
461
+ for(var j=0; j<a2.length; j++){
462
+ var r2 = a2[j];
463
+ if(isEqual(r1,r2)){
464
+ found = true;
465
+ if(isScalar(r2)){
466
+ temp_matched.push(r2);
467
+ }
468
+ else{
469
+ if(r2!=null){
470
+ r2._matched = true;
471
+ }
472
+
473
+ }
474
+ merged.push(r1);
475
+ break;
476
+ }
477
+ }
478
+ if(!found){
479
+ //r1不存在于a2中,说明r1被删除了
480
+ if(section_permission && section_permission.del === 'denied'){
481
+ //不允许删除
482
+ merged.push(r1);
483
+ }
484
+ }
485
+ }
486
+ for(var i=0; i<a2.length; i++){
487
+ r2 = a2[i];
488
+ if(isScalar(r2)){
489
+ if(temp_matched.indexOf(r2)==-1){
490
+ if(!section_permission || section_permission.add !== 'denied' ){
491
+ merged.push(r2);
492
+ }
493
+ }
494
+
495
+ }
496
+ else if(!r2._matched){
497
+ if(!section_permission || section_permission.add !== 'denied' ){
498
+ merged.push(r2);
499
+ }
500
+ }
501
+ }
502
+ return merged;
503
+ }
504
+
505
+ function merge(oldObj,newObj,permissions,orgId){
506
+ var section_permissions = expandSectionPermission(permissions);
507
+ var field_permissions = expandFieldPermission(permissions);
508
+ var table_permissions = expandTablePermission(permissions);
509
+
510
+ var ef_section_permissions = null;
511
+ var ef_field_permissions = null;
512
+ var ef_table_permissions = null;
513
+ if (oldObj._orgId === orgId) {
514
+ ef_section_permissions = section_permissions.same_org;
515
+ ef_field_permissions = field_permissions.same_org;
516
+ ef_table_permissions = table_permissions.same_org;
517
+ } else {
518
+ ef_section_permissions = section_permissions.sub_org;
519
+ ef_field_permissions = field_permissions.sub_org;
520
+ ef_table_permissions = table_permissions.sub_org;
521
+ }
522
+ if(ef_table_permissions && ef_table_permissions.update==='denied'){
523
+ throw "没有修改权限。"
524
+ }
525
+
526
+ for(var k in oldObj){
527
+ var vo = oldObj[k];
528
+ if(typeof vo === 'object'){
529
+ if(ef_section_permissions[k] && ef_section_permissions[k].update==='denied' || ef_section_permissions[k] && ef_section_permissions[k].read==='denied'){
530
+ newObj[k] = vo;
531
+ continue;
532
+ }
533
+
534
+ if(Array.isArray(vo)){
535
+ //暂时对于Array, 只要对于section有权限,则是对于整行来说的,而不能对于行中的某个字段
536
+ var vn = newObj[k];
537
+ var merged = mergeArray(vo,vn,ef_section_permissions[k]);
538
+ newObj[k] = merged;
539
+ }
540
+ else {
541
+ var vn = newObj[k];
542
+ for(var sk in vo){
543
+ var fk = k + "." + sk;
544
+ if(ef_field_permissions[fk] && ef_field_permissions[fk].update==='denied' || ef_field_permissions[fk] && ef_field_permissions[fk].read==='denied'){
545
+ vn[fk] = vo[fk];
546
+ }
547
+ }
548
+ }
549
+ }
550
+ else if(vo === null){
551
+ if((ef_section_permissions[k] && (ef_section_permissions[k].update==='denied' || ef_section_permissions[k].read==='denied') )||
552
+ (ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') )
553
+ ){
554
+ newObj[k] = null;
555
+ }
556
+ }
557
+ else{
558
+ if(ef_field_permissions[k] && (ef_field_permissions[k].update==='denied' || ef_field_permissions[k].read==='denied') ){
559
+ newObj[k] = oldObj[k];
560
+ }
561
+ }
562
+ }
563
+
564
+ for(var k in newObj){
565
+ //找到在new 但是 不在 old里面的,这表明是add
566
+ var vn = newObj[k];
567
+ var vo = oldObj[k];
568
+ if(typeof vn === 'object' ){
569
+
570
+ if(!vo && ef_section_permissions[k] && ef_section_permissions[k].add === 'denied'){
571
+ delete newObj[k];
572
+ }
573
+ else if(Array.isArray(vn)){
574
+ //do nothing
575
+ }
576
+ else{
577
+ for(var nk in vn){
578
+ if(vn[nk] && (!vo || !vo[nk])){
579
+ var fk = k + "." + nk;
580
+ if(ef_field_permissions[fk] && ef_field_permissions[fk].add === 'denied'){
581
+ delete vn[nk];
582
+ }
583
+ }
584
+ }
585
+ }
586
+ }
587
+ else{
588
+ if(!vo && ef_field_permissions[k] && ef_field_permissions[k].add === 'denied'){
589
+ delete newObj[k];
590
+ }
591
+ }
592
+ }
593
+ return newObj;
594
+
595
+ }
596
+
597
+ function getObjectPermissionFilter(tableId, roleId,orgId,userId){
598
+ var filters = [];
599
+ var excludeFilters = [];
600
+
601
+ filters = [
602
+ {
603
+ bool: {
604
+ filter:[
605
+ {term:{"permissions.orgId.keyword":orgId}},
606
+ {term:{"permissions.roleId.keyword":roleId}},
607
+ {term:{"permissions.list.keyword":"allowed"}}
608
+ ]
609
+ }
610
+ },
611
+ {
612
+ bool: {
613
+ filter:[
614
+ {term:{"permissions.orgId.keyword":orgId}},
615
+ {term:{"permissions.roleId.keyword":"*"}},
616
+ {term:{"permissions.list.keyword":"allowed"}}
617
+ ]
618
+ }
619
+ },
620
+ {
621
+ bool: {
622
+ filter:[
623
+ {term:{"permissions.orgId.keyword":"*"}},
624
+ {term:{"permissions.roleId.keyword":roleId}},
625
+ {term:{"permissions.list.keyword":"allowed"}}
626
+ ]
627
+ }
628
+ },
629
+ {
630
+ bool: {
631
+ filter:[
632
+ {term:{"permissions.orgId.keyword":"*"}},
633
+ {term:{"permissions.roleId.keyword":"*"}},
634
+ {term:{"permissions.list.keyword":"allowed"}}
635
+ ]
636
+ }
637
+ },
638
+ {
639
+ bool: {
640
+ filter:[
641
+ {term:{"permissions.userId.keyword":userId}},
642
+ {term:{"permissions.list.keyword":"allowed"}}
643
+ ]
644
+ }
645
+ },
646
+ {
647
+ bool: {
648
+ filter:[
649
+ {term:{"permissions.userId.keyword":"*"}},
650
+ {term:{"permissions.list.keyword":"allowed"}}
651
+ ]
652
+ }
653
+ }
654
+ ];
655
+ //获取对象本身的权限
656
+
657
+ excludeFilters= [
658
+ {
659
+ bool: {
660
+ filter:[
661
+ {term:{"permissions.orgId.keyword":orgId}},
662
+ {term:{"permissions.roleId.keyword":roleId}},
663
+ {term:{"permissions.list.keyword":"denied"}}
664
+ ]
665
+ }
666
+ },
667
+ {
668
+ bool: {
669
+ filter:[
670
+ {term:{"permissions.orgId.keyword":orgId}},
671
+ {term:{"permissions.roleId.keyword":"*"}},
672
+ {term:{"permissions.list.keyword":"denied"}}
673
+ ]
674
+ }
675
+ },
676
+ {
677
+ bool: {
678
+ filter:[
679
+ {term:{"permissions.orgId.keyword":"*"}},
680
+ {term:{"permissions.roleId.keyword":roleId}},
681
+ {term:{"permissions.list.keyword":"denied"}}
682
+ ]
683
+ }
684
+ },
685
+ {
686
+ bool: {
687
+ filter:[
688
+ {term:{"permissions.orgId.keyword":"*"}},
689
+ {term:{"permissions.roleId.keyword":"*"}},
690
+ {term:{"permissions.list.keyword":"denied"}}
691
+ ]
692
+ }
693
+ },
694
+ {
695
+ bool: {
696
+ filter:[
697
+ {term:{"permissions.userId.keyword":userId}},
698
+ {term:{"permissions.list.keyword":"denied"}}
699
+ ]
700
+ }
701
+ },
702
+ {
703
+ bool: {
704
+ filter:[
705
+ {term:{"permissions.userId.keyword":"*"}},
706
+ {term:{"permissions.list.keyword":"denied"}}
707
+ ]
708
+ }
709
+ }
710
+ ];
711
+ return [filters,excludeFilters]
712
+ }
713
+ function getListPermissionFilter(tableId, roleId,orgId,userId, permissions){
714
+ if(userId==='0' && orgId==='0' && roleId==='0'){
715
+ return null;
716
+ }
717
+
718
+ // $.log("getListPermissionFilter tableId="+tableId+",roleId="+roleId+",orgId="+orgId+",userId="+userId+", permissions="+JSON.stringify(permissions));
719
+ //获得有权限的对象的filter
720
+ var tp = expandTablePermission(permissions);
721
+
722
+
723
+ //如果有listAll
724
+
725
+ if(tp.same_org.listall==='allowed' || tp.sub_org.listall==='allowed' || roleId=='0' || userId=='0') {
726
+ //只能读取本组织的数据
727
+ // var objFilters = getObjectPermissionFilter(tableId, roleId,orgId,userId, permissions);
728
+ var orgFilter = null;
729
+ if(tp.sub_org.listall==='allowed'){
730
+ if(orgId!='0'){
731
+ orgFilter = {
732
+ "term": {"_orgIds.keyword": orgId}
733
+ }
734
+ }
735
+ else{
736
+ orgFilter = { "match_all": {}};
737
+ }
738
+ }
739
+ else if(tp.same_org.listall==='allowed'){
740
+ if(orgId!='0'){
741
+ orgFilter = {
742
+ "term": {"_orgId.keyword": orgId}
743
+ }
744
+ }
745
+ else{
746
+ orgFilter = { "match_all": {}};
747
+ }
748
+
749
+ }
750
+ else {
751
+ if(orgId!='0'){
752
+ orgFilter = {
753
+ "term": {"_orgIds.keyword": orgId}
754
+ }
755
+ }
756
+ else{
757
+ orgFilter = { "match_all": {}};
758
+ }
759
+ }
760
+ var shouldFilters = [];
761
+ if(orgFilter){
762
+ shouldFilters.push(orgFilter);
763
+ }
764
+ //组合对象允许的
765
+ return {
766
+ bool:{
767
+ should:shouldFilters
768
+ }
769
+ }
770
+ }
771
+ else {
772
+ var objFilters = getObjectPermissionFilter(tableId, roleId,orgId,userId, permissions);
773
+ return {
774
+ bool:{
775
+ should:objFilters[0],
776
+ must_not:objFilters[1]
777
+ }
778
+ }
779
+ }
780
+
781
+
782
+ }
783
+
784
+
785
+
786
+
787
+