w-web-perm 1.0.25 → 1.0.26

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 (42) hide show
  1. package/dist/css/{app.f22995d1.css → app.d0e43dcc.css} +1 -1
  2. package/dist/index.tmp +9 -1
  3. package/dist/js/app-legacy.b0850281.js +2 -0
  4. package/dist/js/app-legacy.b0850281.js.map +1 -0
  5. package/dist/js/app.db01fef5.js +2 -0
  6. package/dist/js/app.db01fef5.js.map +1 -0
  7. package/dist/js/chunk-vendors-legacy.0432e7bc.js +13 -0
  8. package/dist/js/chunk-vendors-legacy.0432e7bc.js.map +1 -0
  9. package/dist/js/chunk-vendors.0432e7bc.js +13 -0
  10. package/dist/js/chunk-vendors.0432e7bc.js.map +1 -0
  11. package/dist/w-web-perm.umd.js +2 -2
  12. package/dist/w-web-perm.umd.js.map +1 -1
  13. package/docs/WWebPerm.html +1 -1
  14. package/docs/WWebPerm.mjs.html +30 -2
  15. package/docs/index.html +1 -1
  16. package/package.json +5 -5
  17. package/public/index.html +8 -0
  18. package/server/WWebPerm.mjs +29 -1
  19. package/src/App.vue +6 -1
  20. package/src/components/Layout.vue +0 -11
  21. package/src/components/LayoutContent.vue +22 -22
  22. package/src/components/LayoutContentGrups.vue +245 -65
  23. package/src/components/LayoutContentPemis.vue +245 -68
  24. package/src/components/LayoutContentTargets.vue +225 -55
  25. package/src/components/LayoutContentUsers.vue +250 -68
  26. package/src/components/VeCgrups.vue +27 -34
  27. package/src/components/VeCpemis.vue +27 -34
  28. package/src/components/VeCrules.vue +25 -31
  29. package/src/components/VeGrupBlngUsers.vue +30 -18
  30. package/src/components/VePemiBlngGrups.vue +30 -18
  31. package/src/schema/tables/pemis.mjs +1 -1
  32. package/src/store/mutations.mjs +64 -9
  33. package/srv.mjs +9 -1
  34. package/tableTags-web-perm.json +1 -1
  35. package/dist/js/app-legacy.67f2c0dc.js +0 -2
  36. package/dist/js/app-legacy.67f2c0dc.js.map +0 -1
  37. package/dist/js/app.67f2c0dc.js +0 -2
  38. package/dist/js/app.67f2c0dc.js.map +0 -1
  39. package/dist/js/chunk-vendors-legacy.d89048a8.js +0 -13
  40. package/dist/js/chunk-vendors-legacy.d89048a8.js.map +0 -1
  41. package/dist/js/chunk-vendors.d89048a8.js +0 -13
  42. package/dist/js/chunk-vendors.d89048a8.js.map +0 -1
@@ -1,14 +1,14 @@
1
1
  <template>
2
2
  <WDialog
3
3
  :show.sync="bShow"
4
- :title="$t('grupBlngEditUsers')"
4
+ :title="isEditable?$t('grupBlngEditUsers'):$t('grupBlngEditUsersForDisplay')"
5
5
  :icon="mdiFormatListCheckbox"
6
6
  :minWidth="800"
7
7
  :maxWidth="800"
8
8
  :fullscreen="fullscreen"
9
9
  :contentBackgroundColor="'#fff'"
10
10
  :headerBtns="useHeaderBtns"
11
- :hasSaveBtn="isModified"
11
+ :hasSaveBtn="isEditable && isModified"
12
12
  :save-btn-tooltip="$t('save')"
13
13
  :close-btn-tooltip="$t('close')"
14
14
  @click-btns="clickBtns"
@@ -20,7 +20,7 @@
20
20
  <div>
21
21
 
22
22
  <div
23
- style="border-bottom:1px solid #ddd; background:#fff;"
23
+ style="_border-bottom:1px solid #ddd; background:#fff;"
24
24
  v-domresize
25
25
  @domresize="resizeHead"
26
26
  >
@@ -39,7 +39,10 @@
39
39
  </div>
40
40
 
41
41
  <!-- 功能區 -->
42
- <div style="padding:5px; background:#fff; display:flex; align-items:center;">
42
+ <div
43
+ style="padding:5px; background:#fff; display:flex; align-items:center;"
44
+ v-if="isEditable"
45
+ >
43
46
 
44
47
  <template>
45
48
 
@@ -57,7 +60,7 @@
57
60
  @click="showVeGrupBlngUsersToggleItemsEnableAllYes"
58
61
  ></WButtonCircle>
59
62
 
60
- <div style="padding-left:6px;"></div>
63
+ <div style="padding-left:4px;"></div>
61
64
 
62
65
  </template>
63
66
 
@@ -77,7 +80,7 @@
77
80
  @click="showVeGrupBlngUsersToggleItemsEnableAllNo"
78
81
  ></WButtonCircle>
79
82
 
80
- <div style="padding-left:6px;"></div>
83
+ <div style="padding-left:4px;"></div>
81
84
 
82
85
  </template>
83
86
 
@@ -97,7 +100,7 @@
97
100
  @click="showVeGrupBlngUsersToggleItemsEnableAllInv"
98
101
  ></WButtonCircle>
99
102
 
100
- <div style="padding-left:6px;"></div>
103
+ <div style="padding-left:4px;"></div>
101
104
 
102
105
  </template>
103
106
 
@@ -117,7 +120,7 @@
117
120
  @click="deleteItemsCheck"
118
121
  ></WButtonCircle>
119
122
 
120
- <div style="padding-left:6px;"></div>
123
+ <div style="padding-left:4px;"></div>
121
124
 
122
125
  </template>
123
126
 
@@ -197,6 +200,7 @@ export default {
197
200
  panelHeight: 100,
198
201
  headHeight: 100,
199
202
 
203
+ isEditable: false,
200
204
  isModified: false,
201
205
 
202
206
  grup: null,
@@ -373,13 +377,14 @@ export default {
373
377
  keys: ks,
374
378
  kpHead,
375
379
  autoFitColumn: true,
380
+ defCellEditable: false, //vo.isEditable,
376
381
  defHeadFilter: true,
377
382
  defCellAlignH: 'left',
378
- // kpCellEditable: {
379
- // 'name': true,
380
- // 'mode': true,
381
- // 'enable': true,
382
- // },
383
+ kpCellEditable: {
384
+ 'name': vo.isEditable,
385
+ 'mode': false,
386
+ 'enable': false,
387
+ },
383
388
  kpHeadWidth: {
384
389
  'mode': 100,
385
390
  'enable': 100,
@@ -446,7 +451,7 @@ export default {
446
451
  // console.log('mode', mode, k, r)
447
452
 
448
453
  let t = `
449
- <select onchange="$vo.$dg.showVeGrupBlngUsersToggleItemModeByName('${name}',this.value)">
454
+ <select onchange="$vo.$dg.showVeGrupBlngUsersToggleItemModeByName('${name}',this.value)" ${vo.isEditable ? '' : 'disabled'}>
450
455
  <option value="OR" ${mode === 'OR' ? 'selected' : ''}>OR</option>
451
456
  <option value="AND" ${mode === 'AND' ? 'selected' : ''}>AND</option>
452
457
  </select>
@@ -462,7 +467,7 @@ export default {
462
467
  // console.log('name', name, k, r)
463
468
 
464
469
  let t = `
465
- <input type="checkbox" ${v === 'y' ? 'checked' : ''} onclick="$vo.$dg.showVeGrupBlngUsersToggleItemEnableByName('${name}')" />
470
+ <input type="checkbox" ${v === 'y' ? 'checked' : ''} onclick="$vo.$dg.showVeGrupBlngUsersToggleItemEnableByName('${name}')" ${vo.isEditable ? '' : 'disabled'} />
466
471
  `
467
472
 
468
473
  return t
@@ -1118,8 +1123,8 @@ export default {
1118
1123
 
1119
1124
  },
1120
1125
 
1121
- show: function (grup) {
1122
- // console.log('methods show', grup)
1126
+ show: function (msg) {
1127
+ // console.log('methods show', msg)
1123
1128
 
1124
1129
  let vo = this
1125
1130
 
@@ -1129,15 +1134,22 @@ export default {
1129
1134
  //default
1130
1135
  vo.isModified = false
1131
1136
 
1137
+ //isEditable, grup
1138
+ let isEditable = get(msg, 'isEditable', false)
1139
+ let grup = get(msg, 'grup', {})
1140
+
1132
1141
  //grup
1133
1142
  grup = cloneDeep(grup)
1134
- vo.grup = grup
1135
1143
 
1136
1144
  //users
1137
1145
  let users = cloneDeep(vo.users)
1138
1146
 
1139
1147
  //items
1140
1148
  let items = vo.genItems(grup, users)
1149
+
1150
+ //save
1151
+ vo.isEditable = isEditable
1152
+ vo.grup = grup
1141
1153
  vo.items = items
1142
1154
 
1143
1155
  //genOpt
@@ -1,14 +1,14 @@
1
1
  <template>
2
2
  <WDialog
3
3
  :show.sync="bShow"
4
- :title="$t('pemiBlngEditGrups')"
4
+ :title="isEditable?$t('pemiBlngEditGrups'):$t('pemiBlngEditGrupsForDisplay')"
5
5
  :icon="mdiFormatListCheckbox"
6
6
  :minWidth="800"
7
7
  :maxWidth="800"
8
8
  :fullscreen="fullscreen"
9
9
  :contentBackgroundColor="'#fff'"
10
10
  :headerBtns="useHeaderBtns"
11
- :hasSaveBtn="isModified"
11
+ :hasSaveBtn="isEditable && isModified"
12
12
  :save-btn-tooltip="$t('save')"
13
13
  :close-btn-tooltip="$t('close')"
14
14
  @click-btns="clickBtns"
@@ -20,7 +20,7 @@
20
20
  <div>
21
21
 
22
22
  <div
23
- style="border-bottom:1px solid #ddd; background:#fff;"
23
+ style="_border-bottom:1px solid #ddd; background:#fff;"
24
24
  v-domresize
25
25
  @domresize="resizeHead"
26
26
  >
@@ -39,7 +39,10 @@
39
39
  </div>
40
40
 
41
41
  <!-- 功能區 -->
42
- <div style="padding:5px; background:#fff; display:flex; align-items:center;">
42
+ <div
43
+ style="padding:5px; background:#fff; display:flex; align-items:center;"
44
+ v-if="isEditable"
45
+ >
43
46
 
44
47
  <template>
45
48
 
@@ -57,7 +60,7 @@
57
60
  @click="showVePemiBlngGrupsToggleItemsEnableAllYes"
58
61
  ></WButtonCircle>
59
62
 
60
- <div style="padding-left:6px;"></div>
63
+ <div style="padding-left:4px;"></div>
61
64
 
62
65
  </template>
63
66
 
@@ -77,7 +80,7 @@
77
80
  @click="showVePemiBlngGrupsToggleItemsEnableAllNo"
78
81
  ></WButtonCircle>
79
82
 
80
- <div style="padding-left:6px;"></div>
83
+ <div style="padding-left:4px;"></div>
81
84
 
82
85
  </template>
83
86
 
@@ -97,7 +100,7 @@
97
100
  @click="showVePemiBlngGrupsToggleItemsEnableAllInv"
98
101
  ></WButtonCircle>
99
102
 
100
- <div style="padding-left:6px;"></div>
103
+ <div style="padding-left:4px;"></div>
101
104
 
102
105
  </template>
103
106
 
@@ -117,7 +120,7 @@
117
120
  @click="deleteItemsCheck"
118
121
  ></WButtonCircle>
119
122
 
120
- <div style="padding-left:6px;"></div>
123
+ <div style="padding-left:4px;"></div>
121
124
 
122
125
  </template>
123
126
 
@@ -197,6 +200,7 @@ export default {
197
200
  panelHeight: 100,
198
201
  headHeight: 100,
199
202
 
203
+ isEditable: false,
200
204
  isModified: false,
201
205
 
202
206
  pemi: null,
@@ -373,13 +377,14 @@ export default {
373
377
  keys: ks,
374
378
  kpHead,
375
379
  autoFitColumn: true,
380
+ defCellEditable: false, //vo.isEditable,
376
381
  defHeadFilter: true,
377
382
  defCellAlignH: 'left',
378
- // kpCellEditable: {
379
- // 'name': true,
380
- // 'mode': true,
381
- // 'enable': true,
382
- // },
383
+ kpCellEditable: {
384
+ 'name': vo.isEditable,
385
+ 'mode': false,
386
+ 'enable': false,
387
+ },
383
388
  kpHeadWidth: {
384
389
  'mode': 100,
385
390
  'enable': 100,
@@ -446,7 +451,7 @@ export default {
446
451
  // console.log('mode', mode, k, r)
447
452
 
448
453
  let t = `
449
- <select onchange="$vo.$dg.showVePemiBlngGrupsToggleItemModeByName('${name}',this.value)">
454
+ <select onchange="$vo.$dg.showVePemiBlngGrupsToggleItemModeByName('${name}',this.value)" ${vo.isEditable ? '' : 'disabled'}>
450
455
  <option value="OR" ${mode === 'OR' ? 'selected' : ''}>OR</option>
451
456
  <option value="AND" ${mode === 'AND' ? 'selected' : ''}>AND</option>
452
457
  </select>
@@ -462,7 +467,7 @@ export default {
462
467
  // console.log('name', name, k, r)
463
468
 
464
469
  let t = `
465
- <input type="checkbox" ${v === 'y' ? 'checked' : ''} onclick="$vo.$dg.showVePemiBlngGrupsToggleItemEnableByName('${name}')" />
470
+ <input type="checkbox" ${v === 'y' ? 'checked' : ''} onclick="$vo.$dg.showVePemiBlngGrupsToggleItemEnableByName('${name}')" ${vo.isEditable ? '' : 'disabled'} />
466
471
  `
467
472
 
468
473
  return t
@@ -1118,8 +1123,8 @@ export default {
1118
1123
 
1119
1124
  },
1120
1125
 
1121
- show: function (pemi) {
1122
- // console.log('methods show', pemi)
1126
+ show: function (msg) {
1127
+ // console.log('methods show', msg)
1123
1128
 
1124
1129
  let vo = this
1125
1130
 
@@ -1129,15 +1134,22 @@ export default {
1129
1134
  //default
1130
1135
  vo.isModified = false
1131
1136
 
1137
+ //isEditable, pemi
1138
+ let isEditable = get(msg, 'isEditable', false)
1139
+ let pemi = get(msg, 'pemi', {})
1140
+
1132
1141
  //grup
1133
1142
  pemi = cloneDeep(pemi)
1134
- vo.pemi = pemi
1135
1143
 
1136
1144
  //grups
1137
1145
  let grups = cloneDeep(vo.grups)
1138
1146
 
1139
1147
  //items
1140
1148
  let items = vo.genItems(pemi, grups)
1149
+
1150
+ //save
1151
+ vo.isEditable = isEditable
1152
+ vo.pemi = pemi
1141
1153
  vo.items = items
1142
1154
 
1143
1155
  //genOpt
@@ -35,7 +35,7 @@ let settings = {
35
35
  type: 'STRING',
36
36
  },
37
37
  crules: {
38
- name: '管控對象規則清單', //為json字串
38
+ name: '管控對象清單', //為json字串
39
39
  type: 'TEXT',
40
40
  },
41
41
  userId: {
@@ -163,6 +163,15 @@ let state = {
163
163
  // eng: `No description`,
164
164
  // cht: `無說明`,
165
165
  // },
166
+ modeEdit: {
167
+ eng: `Edit mode`,
168
+ cht: `編輯模式`,
169
+ },
170
+ showTabCols: {
171
+ eng: `Show columns`,
172
+ cht: `顯示欄位`,
173
+ },
174
+
166
175
  belongUsers: {
167
176
  eng: `Use users`,
168
177
  cht: `管控所屬使用者`,
@@ -183,6 +192,7 @@ let state = {
183
192
  eng: `Use permissions`,
184
193
  cht: `所屬權限名稱`,
185
194
  },
195
+
186
196
  isAdmin: {
187
197
  eng: `Administrator`,
188
198
  cht: `是否為系統管理員`,
@@ -201,10 +211,23 @@ let state = {
201
211
  cht: `Email出現錯誤待修復`,
202
212
  },
203
213
 
214
+ menuTreeShow: {
215
+ eng: `Show menu`,
216
+ cht: `顯示選單`,
217
+ },
218
+ menuTreeHide: {
219
+ eng: `Hide menu`,
220
+ cht: `隱藏選單`,
221
+ },
222
+
204
223
  managementTargets: {
205
224
  eng: `Targets`,
206
225
  cht: `管理對象`,
207
226
  },
227
+ managementTargetsMsg: {
228
+ eng: `Targets generally refer to entities such as pages, data, etc., and can also include features or services.`,
229
+ cht: `對象泛指實體的頁面、數據等,亦可為的功能或服務。`,
230
+ },
208
231
  targetId: {
209
232
  eng: `Target`,
210
233
  cht: `對象名稱`,
@@ -266,6 +289,10 @@ let state = {
266
289
  eng: `Permissions`,
267
290
  cht: `管理權限`,
268
291
  },
292
+ managementPemisMsg: {
293
+ eng: `Permissions are primarily used to set rules for enabling or disabling various objects.`,
294
+ cht: `權限主要為用來設定各種對象之使用或禁用規則。`,
295
+ },
269
296
  pemiName: {
270
297
  eng: `Name of permission`,
271
298
  cht: `權限名稱`,
@@ -308,7 +335,7 @@ let state = {
308
335
  },
309
336
  pemiCrules: {
310
337
  eng: `Rules of permission`,
311
- cht: `管控對象規則`,
338
+ cht: `管控對象`,
312
339
  },
313
340
  pemiEditBlngGrupsNoPemiId: {
314
341
  eng: `Can not find the id of permission`,
@@ -320,11 +347,15 @@ let state = {
320
347
  },
321
348
  pemiEditCrules: {
322
349
  eng: `Edit rules of permission`,
323
- cht: `編輯對象規則清單`,
350
+ cht: `編輯使用對象`,
351
+ },
352
+ pemiEditCrulesForDisplay: {
353
+ eng: `Rules of permission`,
354
+ cht: `展示使用對象`,
324
355
  },
325
356
  // pemiEditCrulesSimple: {
326
357
  // eng: `Edit rules`,
327
- // cht: `編輯對象規則`,
358
+ // cht: `編輯對象`,
328
359
  // },
329
360
  pemiEditCrulesNoPemiId: {
330
361
  eng: `Can not find the id of permission`,
@@ -336,11 +367,11 @@ let state = {
336
367
  },
337
368
  pemiRnderCrulesNoRule: {
338
369
  eng: `No rule`,
339
- cht: `無使用任何對象規則`,
370
+ cht: `無使用任何對象`,
340
371
  },
341
372
  pemiRnderCrulesHasNRule: {
342
373
  eng: `Has {n} rule(s){nms}`,
343
- cht: `編輯使用 {n} 項對象規則{nms}`,
374
+ cht: `使用共 {n} 項對象{nms}`,
344
375
  },
345
376
  pemiClearPemisFail: {
346
377
  eng: `Failed to clear existing permissions`,
@@ -359,6 +390,10 @@ let state = {
359
390
  eng: `Edit permission groups`,
360
391
  cht: `編輯所屬權限群組`,
361
392
  },
393
+ pemiBlngEditGrupsForDisplay: {
394
+ eng: `Permission groups`,
395
+ cht: `展示所屬權限群組`,
396
+ },
362
397
  pemiBlngRnderNoGrup: {
363
398
  eng: `No users`,
364
399
  cht: `無所屬權限群組`,
@@ -401,6 +436,10 @@ let state = {
401
436
  eng: `Permission groups`,
402
437
  cht: `管理權限群組`,
403
438
  },
439
+ managementGrupsMsg: {
440
+ eng: `Permission groups are primarily used to configure combinations of different permissions.`,
441
+ cht: `權限群組主要為用來設定組合各種權限。`,
442
+ },
404
443
  grupName: {
405
444
  eng: `Name of permission group`,
406
445
  cht: `權限群組名稱`,
@@ -455,7 +494,11 @@ let state = {
455
494
  },
456
495
  grupEditCpemis: {
457
496
  eng: `Edit list of permission group`,
458
- cht: `編輯使用權限清單`,
497
+ cht: `編輯使用權限`,
498
+ },
499
+ grupEditCpemisForDisplay: {
500
+ eng: `List of permission group`,
501
+ cht: `展示使用權限`,
459
502
  },
460
503
  grupRnderCpemisNoPermission: {
461
504
  eng: `No permission`,
@@ -463,7 +506,7 @@ let state = {
463
506
  },
464
507
  grupRnderCpemisHasNPermissions: {
465
508
  eng: `Has {n} permission(s){nms}`,
466
- cht: `編輯使用 {n} 項權限{nms}`,
509
+ cht: `使用 {n} 項權限{nms}`,
467
510
  },
468
511
  grupClearGrupsFail: {
469
512
  eng: `Failed to clear existing permission groups`,
@@ -486,6 +529,10 @@ let state = {
486
529
  eng: `Edit permission group of users`,
487
530
  cht: `編輯所屬使用者`,
488
531
  },
532
+ grupBlngEditUsersForDisplay: {
533
+ eng: `Permission group of users`,
534
+ cht: `展示所屬使用者`,
535
+ },
489
536
  grupBlngRnderNoUser: {
490
537
  eng: `No users`,
491
538
  cht: `無所屬使用者`,
@@ -528,6 +575,10 @@ let state = {
528
575
  eng: `Users`,
529
576
  cht: `管理使用者`,
530
577
  },
578
+ managementUsersMsg: {
579
+ eng: `Users are primarily for providing or extending user information and can be configured with combinations of various permission groups.`,
580
+ cht: `使用者主要為提供或擴充使用者資訊,並可設定組合各種權限群組。`,
581
+ },
531
582
  userName: {
532
583
  eng: `Name of user`,
533
584
  cht: `使用者名稱`,
@@ -582,7 +633,11 @@ let state = {
582
633
  },
583
634
  userEditCgrups: {
584
635
  eng: `Edit list of user`,
585
- cht: `編輯使用權限群組清單`,
636
+ cht: `編輯使用權限群組`,
637
+ },
638
+ userEditCgrupsForDisplay: {
639
+ eng: `Edit list of user`,
640
+ cht: `展示使用權限群組`,
586
641
  },
587
642
  userEditCgrupsNoUserId: {
588
643
  eng: `Can not find the id of user`,
@@ -622,7 +677,7 @@ let state = {
622
677
  },
623
678
  userRnderCgrupsHasNGroups: {
624
679
  eng: `Has {n} permission group(s){nms}`,
625
- cht: `編輯使用 {n} 項權限群組{nms}`,
680
+ cht: `使用 {n} 項權限群組{nms}`,
626
681
  },
627
682
 
628
683
  cgrupEditNoName: {
package/srv.mjs CHANGED
@@ -17,6 +17,14 @@ let opt = {
17
17
  serverPort: 11006,
18
18
  subfolder: '', //mperm
19
19
  urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/
20
+ showModeEditTargets: 'y', //'n',
21
+ showModeEditPemis: 'y',
22
+ showModeEditGrups: 'y',
23
+ showModeEditUsers: 'y',
24
+ modeEditTargets: 'y', //'n',
25
+ modeEditPemis: 'y',
26
+ modeEditGrups: 'y',
27
+ modeEditUsers: 'y',
20
28
 
21
29
  webName: {
22
30
  'eng': 'Permission Service',
@@ -24,7 +32,7 @@ let opt = {
24
32
  },
25
33
  webDescription: {
26
34
  'eng': 'A web service package for user permissions and management targets.',
27
- 'cht': 'A web service package for user permissions and management targets.',
35
+ 'cht': '基於簡易分層架構來給予與設定使用者所需之權限及群組管理功能',
28
36
  },
29
37
  webLogo: 'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQ4IiB3aWR0aD0iNDgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQ4IDBIMHY0OGg0OFYwWiIgZmlsbD0iI2ZmZiIgZmlsbC1vcGFjaXR5PSIuMDEiLz48cGF0aCBkPSJNMzcuODU2IDIwdjhNMjcuNDY0IDM4bDMuNDY0LTIgMy40NjQtMk0yMC41MzYgMzhsLTMuNDY1LTItMy40NjQtMk0xMC4xNDQgMjB2OE0xMy42MDcgMTRsMy40NjUtMiAzLjQ2NC0yTTI3LjQ2NCAxMGwzLjQ2NCAyIDMuNDY0IDIiIHN0cm9rZT0iI0ZGOTgwMCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBzdHJva2Utd2lkdGg9IjIiLz48cGF0aCBkPSJNMjQgNDRhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wk0yNCAxMmE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhaTTI0IDI4YTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFpNMzggMjBhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4Wk0zOCAzNmE0IDQgMCAxIDAgMC04IDQgNCAwIDAgMCAwIDhaTTEwIDIwYTQgNCAwIDEgMCAwLTggNCA0IDAgMCAwIDAgOFpNMTAgMzZhNCA0IDAgMSAwIDAtOCA0IDQgMCAwIDAgMCA4WiIgZmlsbD0iI0ZGRTBCMiIgc3Ryb2tlPSIjRkY5ODAwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0cm9rZS13aWR0aD0iMiIvPjwvc3ZnPg==',
30
38
 
@@ -1 +1 @@
1
- {"grups":"eyUJB7","pemis":"Jp2FFI","targets":"KXMbz0","users":"mRH4QR"}
1
+ {"grups":"eTl8uq","pemis":"kB3ULB","targets":"SO2G1L","users":"2ocEzg"}