w-web-perm 1.0.0 → 1.0.2

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 (38) hide show
  1. package/README.md +58 -0
  2. package/dist/css/{chunk-vendors.65775501.css → chunk-vendors.1c6c57f9.css} +1 -1
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.317de647.js +2 -0
  5. package/dist/js/app-legacy.317de647.js.map +1 -0
  6. package/dist/js/app.94cdbe9a.js +2 -0
  7. package/dist/js/app.94cdbe9a.js.map +1 -0
  8. package/dist/js/chunk-vendors-legacy.a074d0c0.js +13 -0
  9. package/dist/js/chunk-vendors-legacy.a074d0c0.js.map +1 -0
  10. package/dist/js/chunk-vendors.a074d0c0.js +13 -0
  11. package/dist/js/chunk-vendors.a074d0c0.js.map +1 -0
  12. package/dist/w-web-perm.umd.js +2 -2
  13. package/dist/w-web-perm.umd.js.map +1 -1
  14. package/docs/WWebPerm.html +1 -1
  15. package/docs/WWebPerm.mjs.html +61 -11
  16. package/docs/index.html +1 -1
  17. package/package.json +5 -4
  18. package/server/WWebPerm.mjs +60 -10
  19. package/src/components/LayoutContentGroups.vue +3 -2
  20. package/src/components/LayoutContentTargets.vue +9 -2
  21. package/src/components/VeUser.vue +5 -4
  22. package/src/components/ruleGroup.vue +6 -28
  23. package/src/perm.mjs +92 -44
  24. package/src/plugins/mShare.mjs +23 -155
  25. package/src/schema/tables/ruleGroups.mjs +2 -3
  26. package/src/schema/tables/targets.mjs +25 -32
  27. package/src/schema/tables/users.mjs +1 -1
  28. package/src/store/mutations.mjs +1 -1
  29. package/srv.mjs +24 -7
  30. package/tableTags-web-perm.json +1 -1
  31. package/dist/js/app-legacy.954e168c.js +0 -2
  32. package/dist/js/app-legacy.954e168c.js.map +0 -1
  33. package/dist/js/app.954e168c.js +0 -2
  34. package/dist/js/app.954e168c.js.map +0 -1
  35. package/dist/js/chunk-vendors-legacy.f5f1a231.js +0 -13
  36. package/dist/js/chunk-vendors-legacy.f5f1a231.js.map +0 -1
  37. package/dist/js/chunk-vendors.f5f1a231.js +0 -13
  38. package/dist/js/chunk-vendors.f5f1a231.js.map +0 -1
@@ -813,7 +813,7 @@
813
813
  <br class="clear">
814
814
 
815
815
  <footer>
816
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Wed Jul 19 2023 12:50:03 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
816
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jul 30 2023 21:50:08 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
817
817
  </footer>
818
818
 
819
819
  <script>prettyPrint();</script>
@@ -286,7 +286,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
286
286
  //userFind
287
287
  let userFind = await woItems.users.select({ [mappingBy]: vSelf, isActive: 'y' })
288
288
  userFind = get(userFind, 0, null)
289
- console.log('userFind', userFind)
289
+ // console.log('userFind', userFind)
290
290
 
291
291
  //複寫isAdmin
292
292
  let isAdminSrc = get(userSelf, 'isAdmin', '')
@@ -294,7 +294,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
294
294
  if (isAdminSrc !== isAdminSelf) {
295
295
  userFind.isAdmin = isAdminSelf
296
296
  }
297
- console.log('userFind(isAdmin)', userFind)
297
+ // console.log('userFind(isAdmin)', userFind)
298
298
 
299
299
  return userFind
300
300
  }
@@ -339,7 +339,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
339
339
  // console.log('userFind', userFind)
340
340
 
341
341
  //ruleGroups
342
- let ruleGroups = await woItems.ruleGroups.select({})
342
+ let ruleGroups = await woItems.ruleGroups.select()
343
343
  // console.log('ruleGroups', ruleGroups)
344
344
 
345
345
  //targets
@@ -357,8 +357,11 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
357
357
  }
358
358
 
359
359
  return {
360
- user: userFind,
361
- roles: urs,
360
+ user: {
361
+ ...userFind,
362
+ ruleGroupsNames: urs.ruleGroupsNames, //ruleGroupsNames併入user內顯示
363
+ },
364
+ rules: urs.rules,
362
365
  }
363
366
  }
364
367
 
@@ -410,11 +413,12 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
410
413
  },
411
414
  {
412
415
  method: 'GET',
413
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
416
+ path: '/api/getUserByToken', //名稱getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
414
417
  handler: async function (req, res) {
415
- // console.log('verifyIdentity', req)
418
+ // console.log('getUserByToken', req)
416
419
 
417
420
  async function core() {
421
+ //提供對象為browser使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 確認後回傳該使用者(系統管理員)資訊物件
418
422
 
419
423
  //token
420
424
  let token = get(req, 'query.token', '')
@@ -425,7 +429,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
425
429
  // console.log('userSelf', userSelf)
426
430
 
427
431
  //check
428
- if (get(userSelf, 'isAdmin') !== 'y') { //界面須系統管理員才能使用
432
+ if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
429
433
  return Promise.reject(`user does not have permission`)
430
434
  }
431
435
 
@@ -433,7 +437,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
433
437
  }
434
438
 
435
439
  //pm2resolve core
436
- let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 會提取state進行判斷
440
+ let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 須另提取state進行判斷
437
441
  // console.log('getUserByToken', r)
438
442
 
439
443
  return r
@@ -441,11 +445,12 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
441
445
  },
442
446
  {
443
447
  method: 'GET',
444
- path: '/api/getPerm', //外部系統呼叫會須先檢測token是否有效, 再依照token所代表的使用者userId提供權限資訊物件
448
+ path: '/api/getPerm',
445
449
  handler: async function (req, res) {
446
450
  // console.log('getPerm', req)
447
451
 
448
452
  async function core() {
453
+ //提供對象為node與browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者權限資訊物件
449
454
 
450
455
  //parseToken
451
456
  let token = parseToken(req)
@@ -485,6 +490,51 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
485
490
  let r = await pm2resolve(core)()
486
491
  // console.log('getPerm r', r)
487
492
 
493
+ return r
494
+ },
495
+ },
496
+ {
497
+ method: 'GET',
498
+ path: '/api/getPermById',
499
+ handler: async function (req, res) {
500
+ // console.log('getPermById', req)
501
+
502
+ async function core() {
503
+ //提供對象為node使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 再由query取得欲查詢的使用者userId, 再由其userId查詢回傳該使用者權限資訊物件
504
+
505
+ //token
506
+ let token = get(req, 'query.token', '')
507
+ // console.log('token', token)
508
+
509
+ //getGenUserByUserId
510
+ let userSelf = await getTokenUserForSelf(token)
511
+ // console.log('userSelf', userSelf)
512
+
513
+ //check
514
+ if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
515
+ return Promise.reject(`user does not have permission`)
516
+ }
517
+
518
+ //userId
519
+ let userId = get(req, 'query.userId', '')
520
+ // console.log('userId', userId)
521
+
522
+ //getGenUserAndRulesByUserId
523
+ let r = await getGenUserAndRulesByUserId(userId)
524
+ // console.log('getGenUserAndRulesByUserId', r)
525
+
526
+ //check
527
+ if (!iseobj(r)) {
528
+ return Promise.reject(`user does not have permrules`)
529
+ }
530
+
531
+ return r
532
+ }
533
+
534
+ //pm2resolve core
535
+ let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 須另提取state進行判斷
536
+ // console.log('getUserByToken', r)
537
+
488
538
  return r
489
539
  },
490
540
  },
@@ -545,7 +595,7 @@ export default WWebPerm
545
595
  <br class="clear">
546
596
 
547
597
  <footer>
548
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Wed Jul 19 2023 12:50:03 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
598
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jul 30 2023 21:50:08 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
549
599
  </footer>
550
600
 
551
601
  <script>prettyPrint();</script>
package/docs/index.html CHANGED
@@ -71,7 +71,7 @@
71
71
  <br class="clear">
72
72
 
73
73
  <footer>
74
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Wed Jul 19 2023 12:50:03 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Sun Jul 30 2023 21:50:08 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
package/package.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "w-web-perm",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "main": "dist/w-web-perm.umd.js",
5
5
  "dependencies": {
6
6
  "@mdi/js": "^7.2.96",
7
7
  "axios": "^1.3.4",
8
+ "json5": "^2.2.3",
8
9
  "lodash": "^4.17.21",
9
10
  "showdown": "^2.1.0",
10
- "w-component-vue": "^2.3.6",
11
+ "w-component-vue": "^2.3.18",
11
12
  "w-data-collector": "^1.0.19",
12
13
  "w-serv-hapi": "^1.0.11",
13
14
  "w-serv-orm": "^1.0.7",
14
15
  "w-ui-loginout": "^1.0.4",
15
- "wsemi": "^1.7.17"
16
+ "wsemi": "^1.7.19"
16
17
  },
17
18
  "devDependencies": {
18
19
  "@vue/cli-plugin-babel": "^5.0.8",
@@ -72,4 +73,4 @@
72
73
  ],
73
74
  "author": "yuda-lyu(semisphere)",
74
75
  "license": "MIT"
75
- }
76
+ }
@@ -239,7 +239,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
239
239
  //userFind
240
240
  let userFind = await woItems.users.select({ [mappingBy]: vSelf, isActive: 'y' })
241
241
  userFind = get(userFind, 0, null)
242
- console.log('userFind', userFind)
242
+ // console.log('userFind', userFind)
243
243
 
244
244
  //複寫isAdmin
245
245
  let isAdminSrc = get(userSelf, 'isAdmin', '')
@@ -247,7 +247,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
247
247
  if (isAdminSrc !== isAdminSelf) {
248
248
  userFind.isAdmin = isAdminSelf
249
249
  }
250
- console.log('userFind(isAdmin)', userFind)
250
+ // console.log('userFind(isAdmin)', userFind)
251
251
 
252
252
  return userFind
253
253
  }
@@ -292,7 +292,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
292
292
  // console.log('userFind', userFind)
293
293
 
294
294
  //ruleGroups
295
- let ruleGroups = await woItems.ruleGroups.select({})
295
+ let ruleGroups = await woItems.ruleGroups.select()
296
296
  // console.log('ruleGroups', ruleGroups)
297
297
 
298
298
  //targets
@@ -310,8 +310,11 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
310
310
  }
311
311
 
312
312
  return {
313
- user: userFind,
314
- roles: urs,
313
+ user: {
314
+ ...userFind,
315
+ ruleGroupsNames: urs.ruleGroupsNames, //ruleGroupsNames併入user內顯示
316
+ },
317
+ rules: urs.rules,
315
318
  }
316
319
  }
317
320
 
@@ -363,11 +366,12 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
363
366
  },
364
367
  {
365
368
  method: 'GET',
366
- path: '/api/getUserByToken', //未登入界面需先檢測token是否為系統管理員, 確認後回傳為系統管理員資訊物件, getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
369
+ path: '/api/getUserByToken', //名稱getUserByToken為w-ui-loginout預設值, 若要更改兩邊須同時修改
367
370
  handler: async function (req, res) {
368
- // console.log('verifyIdentity', req)
371
+ // console.log('getUserByToken', req)
369
372
 
370
373
  async function core() {
374
+ //提供對象為browser使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 確認後回傳該使用者(系統管理員)資訊物件
371
375
 
372
376
  //token
373
377
  let token = get(req, 'query.token', '')
@@ -378,7 +382,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
378
382
  // console.log('userSelf', userSelf)
379
383
 
380
384
  //check
381
- if (get(userSelf, 'isAdmin') !== 'y') { //界面須系統管理員才能使用
385
+ if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
382
386
  return Promise.reject(`user does not have permission`)
383
387
  }
384
388
 
@@ -386,7 +390,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
386
390
  }
387
391
 
388
392
  //pm2resolve core
389
- let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 會提取state進行判斷
393
+ let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 須另提取state進行判斷
390
394
  // console.log('getUserByToken', r)
391
395
 
392
396
  return r
@@ -394,11 +398,12 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
394
398
  },
395
399
  {
396
400
  method: 'GET',
397
- path: '/api/getPerm', //外部系統呼叫會須先檢測token是否有效, 再依照token所代表的使用者userId提供權限資訊物件
401
+ path: '/api/getPerm',
398
402
  handler: async function (req, res) {
399
403
  // console.log('getPerm', req)
400
404
 
401
405
  async function core() {
406
+ //提供對象為node與browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者權限資訊物件
402
407
 
403
408
  //parseToken
404
409
  let token = parseToken(req)
@@ -438,6 +443,51 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
438
443
  let r = await pm2resolve(core)()
439
444
  // console.log('getPerm r', r)
440
445
 
446
+ return r
447
+ },
448
+ },
449
+ {
450
+ method: 'GET',
451
+ path: '/api/getPermById',
452
+ handler: async function (req, res) {
453
+ // console.log('getPermById', req)
454
+
455
+ async function core() {
456
+ //提供對象為node使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 再由query取得欲查詢的使用者userId, 再由其userId查詢回傳該使用者權限資訊物件
457
+
458
+ //token
459
+ let token = get(req, 'query.token', '')
460
+ // console.log('token', token)
461
+
462
+ //getGenUserByUserId
463
+ let userSelf = await getTokenUserForSelf(token)
464
+ // console.log('userSelf', userSelf)
465
+
466
+ //check
467
+ if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
468
+ return Promise.reject(`user does not have permission`)
469
+ }
470
+
471
+ //userId
472
+ let userId = get(req, 'query.userId', '')
473
+ // console.log('userId', userId)
474
+
475
+ //getGenUserAndRulesByUserId
476
+ let r = await getGenUserAndRulesByUserId(userId)
477
+ // console.log('getGenUserAndRulesByUserId', r)
478
+
479
+ //check
480
+ if (!iseobj(r)) {
481
+ return Promise.reject(`user does not have permrules`)
482
+ }
483
+
484
+ return r
485
+ }
486
+
487
+ //pm2resolve core
488
+ let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 須另提取state進行判斷
489
+ // console.log('getUserByToken', r)
490
+
441
491
  return r
442
492
  },
443
493
  },
@@ -148,6 +148,7 @@
148
148
 
149
149
  <script>
150
150
  import { mdiStackOverflow, mdiVectorPolylinePlus, mdiCheckboxMarkedCircle, mdiCloudUploadOutline } from '@mdi/js/mdi.js'
151
+ // import JSON5 from 'json5'
151
152
  import get from 'lodash/get'
152
153
  import each from 'lodash/each'
153
154
  import map from 'lodash/map'
@@ -211,9 +212,9 @@ export default {
211
212
 
212
213
  let vo = this
213
214
 
214
- //rs, 此區程式碼等同於ruleGroups, 若確認後續無需求再移除
215
+ //rs
215
216
  let rs = map(vo.ruleGroups, (v) => {
216
- // let rules = JSON.parse(v.crules)
217
+ // let rules = JSON5.parse(v.crules)
217
218
  return {
218
219
  ...v,
219
220
  // rules,
@@ -123,6 +123,7 @@
123
123
 
124
124
  <script>
125
125
  import { mdiGamepadCircle, mdiStackOverflow, mdiAccountGroupOutline, mdiBallotRecountOutline, mdiCloudUploadOutline } from '@mdi/js/mdi.js'
126
+ import JSON5 from 'json5'
126
127
  import get from 'lodash/get'
127
128
  import set from 'lodash/set'
128
129
  import each from 'lodash/each'
@@ -141,6 +142,10 @@ import WTree from 'w-component-vue/src/components/WTree.vue'
141
142
  import { getTreeBlocks } from '../plugins/mShare.mjs'
142
143
 
143
144
 
145
+ //dlm
146
+ let dlm = '.'
147
+
148
+
144
149
  export default {
145
150
  components: {
146
151
  WIcon,
@@ -202,6 +207,8 @@ export default {
202
207
 
203
208
  //getTreeBlocks
204
209
  let treeBlocks = getTreeBlocks(vo.targets)
210
+ // console.log('targets', vo.targets)
211
+ // console.log('treeBlocks', treeBlocks)
205
212
 
206
213
  //save
207
214
  vo.treeBlocks = treeBlocks
@@ -379,7 +386,7 @@ export default {
379
386
  let nkParent = dropRight(v.nk, 2)
380
387
  let p = get(treeBlocksTemp, nkParent)
381
388
  v.parentId = p.id
382
- v.id = `${v.parentId}.${v.text}`
389
+ v.id = `${v.parentId}${dlm}${v.text}` //[tag:dlm]
383
390
  }
384
391
  v.order = k //需重新給予order
385
392
  set(treeBlocksTemp, v.nk, v)
@@ -448,7 +455,7 @@ export default {
448
455
  //gs
449
456
  let gs = []
450
457
  each(vo.ruleGroups, (v) => {
451
- let rules = JSON.parse(v.crules)
458
+ let rules = JSON5.parse(v.crules)
452
459
  let r = replaceObjKeys(rules, kpDiffs)
453
460
  if (r.isChanged) {
454
461
  gs.push({
@@ -153,6 +153,7 @@
153
153
  <script>
154
154
  import { mdiAccountEdit, mdiFileTree } from '@mdi/js/mdi.js'
155
155
  import Vue from 'vue'
156
+ // import JSON5 from 'json5'
156
157
  import get from 'lodash/get'
157
158
  import each from 'lodash/each'
158
159
  import map from 'lodash/map'
@@ -227,9 +228,9 @@ export default {
227
228
 
228
229
  let vo = this
229
230
 
230
- //rs, 此區程式碼等同於ruleGroups, 若確認後續無需求再移除
231
+ //rs
231
232
  let rs = map(vo.ruleGroups, (v) => {
232
- // let rules = JSON.parse(v.crules)
233
+ // let rules = JSON5.parse(v.crules)
233
234
  return {
234
235
  ...v,
235
236
  // rules,
@@ -311,8 +312,8 @@ export default {
311
312
  //mergedGroup
312
313
  let mergedGroup = {
313
314
  id: 'merged-group',
314
- name: 'merged-group',
315
- crules: JSON.stringify(urs),
315
+ name: urs.ruleGroupsNames,
316
+ crules: JSON.stringify(urs.rules),
316
317
  }
317
318
 
318
319
  //mergedGroup
@@ -92,9 +92,10 @@
92
92
 
93
93
  <WTree
94
94
  :viewHeightMax="treeHeight"
95
- :icon-toggle-color="'#666'"
96
- :icon-toggle-background-color="'transparent'"
97
- :icon-toggle-background-color-hover="'transparent'"
95
+ :indent="0.5"
96
+ :iconToggleColor="'#666'"
97
+ :iconToggleBackgroundColor="'transparent'"
98
+ :iconToggleBackgroundColorHover="'transparent'"
98
99
  :data="treeBlocks"
99
100
  >
100
101
  <template v-slot:item="props">
@@ -207,6 +208,7 @@
207
208
 
208
209
  <script>
209
210
  import { mdiEyeCheck, mdiEyeOff, mdiEyedropper, mdiEyedropperOff } from '@mdi/js/mdi.js'
211
+ import JSON5 from 'json5'
210
212
  import get from 'lodash/get'
211
213
  import set from 'lodash/set'
212
214
  import each from 'lodash/each'
@@ -275,7 +277,7 @@ export default {
275
277
  let group = cloneDeep(vo.group)
276
278
 
277
279
  //save rules
278
- let rules = JSON.parse(group.crules)
280
+ let rules = JSON5.parse(group.crules)
279
281
  group.rules = rules
280
282
  // console.log('rules', rules)
281
283
 
@@ -303,30 +305,6 @@ export default {
303
305
  return get(this, `$store.state.targets`)
304
306
  },
305
307
 
306
- // blocks: function() {
307
- // // console.log('computed blocks')
308
-
309
- // let vo = this
310
-
311
- // //rs
312
- // let rs = map(vo.targets, (v) => {
313
-
314
- // //text, parentId
315
- // let s = sep(v.id, '.')
316
- // let text = get(takeRight(s), 0) //取最後節點
317
- // s = dropRight(s, 1)
318
- // let parentId = join(s, '.') //取父節點
319
-
320
- // return {
321
- // ...v,
322
- // parentId,
323
- // text,
324
- // }
325
- // })
326
-
327
- // return rs
328
- // },
329
-
330
308
  treeBlocks: function() {
331
309
  // console.log('computed treeBlocks')
332
310
 
package/src/perm.mjs CHANGED
@@ -1,60 +1,108 @@
1
1
  import axios from 'axios'
2
+ import get from 'lodash/get'
2
3
  import isestr from 'wsemi/src/isestr.mjs'
4
+ import isbol from 'wsemi/src/isbol.mjs'
5
+ import isfun from 'wsemi/src/isfun.mjs'
3
6
  import genPm from 'wsemi/src/genPm.mjs'
7
+ import pmInvResolve from 'wsemi/src/pmInvResolve.mjs'
4
8
 
5
9
 
6
- let _url = ''
10
+ function perm() {
7
11
 
12
+ //pmd
13
+ let pmd = null
8
14
 
9
- function iniPerm(url) {
10
- _url = url
11
- }
15
+ //conn
16
+ let conn = (url, opt = {}) => {
12
17
 
18
+ //check
19
+ if (!isestr(url)) {
20
+ throw new Error(`invalid url`)
21
+ }
22
+ if (url.indexOf('token=') === 0) {
23
+ throw new Error(`url does not include 'token='`)
24
+ }
25
+ if (url.indexOf('userId=') === 0) {
26
+ throw new Error(`url does not include 'userId='`)
27
+ }
13
28
 
14
- async function getPerm(token) {
29
+ //thenExtractData
30
+ let thenExtractData = get(opt, 'thenExtractData')
31
+ if (!isbol(thenExtractData)) {
32
+ thenExtractData = false //通過axios取數據時須給予true
33
+ }
15
34
 
16
- //check
17
- if (!isestr(_url)) {
18
- throw new Error(`invalid url, need to use iniPerm to set url`)
19
- }
35
+ //useAsync
36
+ let useAsync = get(opt, 'useAsync')
37
+ if (!isbol(useAsync)) {
38
+ useAsync = false
39
+ }
20
40
 
21
- //pm
22
- let pm = genPm()
23
-
24
- //url
25
- let url = `${_url}?token=${token}`
26
-
27
- //axios
28
- await axios({
29
- method: 'get',
30
- url,
31
- // headers: { 'Content-Type': 'application/json; charset=utf-8' },
32
- // data: rin,
33
- })
34
- .then((res) => {
35
- // console.log(res)
36
- let r = {
37
- msg: '成功取得使用者權限',
38
- res,
39
- }
40
- pm.resolve(r)
41
- })
42
- .catch((err) => {
43
- // console.log(err)
44
- let r = {
45
- msg: '取得使用者權限發生錯誤',
46
- res: err,
47
- }
48
- pm.reject(r)
49
- })
50
-
51
- return pm
52
- }
41
+ //permSuccess
42
+ let permSuccess = get(opt, 'permSuccess')
43
+
44
+ //permError
45
+ let permError = get(opt, 'permError')
46
+
47
+ //pm
48
+ let pm = null
49
+ if (useAsync) {
50
+ pm = genPm()
51
+ }
53
52
 
53
+ //get
54
+ let pms = axios.get(url)
55
+ pms = pmInvResolve(pms, { thenExtractData })
56
+ pms
57
+ .then((res) => {
58
+ // console.log('perm.getPerm then', res)
59
+ pmd = res
60
+ if (isfun(permSuccess)) {
61
+ permSuccess(pmd)
62
+ }
63
+ if (useAsync) {
64
+ pm.resolve(kp)
65
+ }
66
+ })
67
+ .catch((err) => {
68
+ // console.log('perm.getPerm catch', err)
69
+ if (isfun(permError)) {
70
+ permError(err)
71
+ }
72
+ if (useAsync) {
73
+ pm.reject()
74
+ }
75
+ })
76
+
77
+ if (useAsync) {
78
+ return pm
79
+ }
80
+ return kp
81
+ }
82
+
83
+ //kp
84
+ let kp = {
85
+ conn,
86
+ getUser: () => {
87
+ let u = get(pmd, `user`, {})
88
+ // console.log('u', u)
89
+ return u
90
+ },
91
+ getRules: () => {
92
+ return get(pmd, `rules`, {})
93
+ },
94
+ rule: (key) => {
95
+ return get(pmd, `rules.${key}`, {})
96
+ },
97
+ show: (key) => {
98
+ return get(pmd, `rules.${key}.show`, 'n')
99
+ },
100
+ active: (key) => {
101
+ return get(pmd, `rules.${key}.active`, 'n')
102
+ },
103
+ }
54
104
 
55
- let perm = {
56
- iniPerm,
57
- getPerm,
105
+ return kp
58
106
  }
59
107
 
60
108