w-web-sso 1.0.21 → 1.0.23

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 (43) hide show
  1. package/db/wsso/ips/data.mdb +0 -0
  2. package/db/wsso/ips/lock.mdb +0 -0
  3. package/db/wsso/tokens/data.mdb +0 -0
  4. package/db/wsso/tokens/lock.mdb +0 -0
  5. package/db/wsso/users/data.mdb +0 -0
  6. package/db/wsso/users/lock.mdb +0 -0
  7. package/dist/index.tmp +1 -1
  8. package/dist/js/app-legacy.86b4b255.js +2 -0
  9. package/dist/js/app-legacy.86b4b255.js.map +1 -0
  10. package/dist/js/app.86b4b255.js +2 -0
  11. package/dist/js/app.86b4b255.js.map +1 -0
  12. package/dist/js/{chunk-vendors-legacy.c67d66a8.js → chunk-vendors-legacy.db5d54d9.js} +1 -1
  13. package/dist/js/chunk-vendors-legacy.db5d54d9.js.map +1 -0
  14. package/dist/js/{chunk-vendors.c67d66a8.js → chunk-vendors.db5d54d9.js} +1 -1
  15. package/dist/js/chunk-vendors.db5d54d9.js.map +1 -0
  16. package/dist/w-web-sso.umd.js +2 -2
  17. package/dist/w-web-sso.umd.js.map +1 -1
  18. package/docs/WWebSso.html +1 -1
  19. package/docs/WWebSso.mjs.html +6 -11
  20. package/docs/index.html +1 -1
  21. package/g.provideUsers.mjs +31 -30
  22. package/package.json +2 -3
  23. package/server/WWebSso.mjs +5 -10
  24. package/server/provideTabs.mjs +71 -0
  25. package/server/staLogs/staIp.callWorker.mjs +1 -0
  26. package/server/staLogs/staIp.mjs +2 -1
  27. package/server/staLogs/staIp.shellWorker.mjs +1 -0
  28. package/server/staLogs/staToken.callWorker.mjs +1 -0
  29. package/server/staLogs/staToken.mjs +2 -1
  30. package/server/staLogs/staToken.shellWorker.mjs +1 -0
  31. package/server/staLogs/staUserAccountLogin.callWorker.mjs +1 -0
  32. package/server/staLogs/staUserAccountLogin.shellWorker.mjs +1 -0
  33. package/src/App.vue +0 -1
  34. package/src/getUserByToken.mjs +98 -0
  35. package/src/getUsersByToken.mjs +99 -0
  36. package/src/plugins/mShare.mjs +26 -7
  37. package/dist/js/app-legacy.1ef4eafd.js +0 -2
  38. package/dist/js/app-legacy.1ef4eafd.js.map +0 -1
  39. package/dist/js/app.1ef4eafd.js +0 -2
  40. package/dist/js/app.1ef4eafd.js.map +0 -1
  41. package/dist/js/chunk-vendors-legacy.c67d66a8.js.map +0 -1
  42. package/dist/js/chunk-vendors.c67d66a8.js.map +0 -1
  43. package/server/provideUsers.mjs +0 -67
package/docs/WWebSso.html CHANGED
@@ -387,7 +387,7 @@
387
387
  <br class="clear">
388
388
 
389
389
  <footer>
390
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Mon Jul 14 2025 15:01:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
390
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Wed Jul 23 2025 15:26:00 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
391
391
  </footer>
392
392
 
393
393
  <script>prettyPrint();</script>
@@ -566,13 +566,13 @@ function WWebSso(WOrm, url, db, pathSettings) {
566
566
  // return Promise.reject(`invalid ${key} from inp`)
567
567
  // }
568
568
 
569
- // //resave
570
- // inp = {
569
+ // //r
570
+ // let r = {
571
571
  // from,
572
572
  // [key]: vs,
573
573
  // }
574
574
 
575
- // return inp
575
+ // return r
576
576
  // }
577
577
 
578
578
 
@@ -621,13 +621,8 @@ function WWebSso(WOrm, url, db, pathSettings) {
621
621
  //funCheckAdmin
622
622
  let funCheckAdmin = (tk, u) => {
623
623
  // console.log('tk', tk, 'u', u)
624
- let b1 = s.getIsVerified(u) //須已驗證
625
- let b2 = !s.getIsExpired(u) //不能過期
626
- let b3 = !s.getIsBlocked(u) //不能封鎖中
627
- let b4 = s.getIsAdmin(u) //須為系統管理員
628
- let b5 = s.getIsActive(u) //須有效
629
- let b = b1 &amp;&amp; b2 &amp;&amp; b3 &amp;&amp; b4 &amp;&amp; b5
630
- // console.log('fun', 'tk', tk, 'u', u, b)
624
+ let b = s.checkUserAdmin(u)
625
+ // console.log('checkUserAdmin', b)
631
626
  return b
632
627
  }
633
628
 
@@ -1177,7 +1172,7 @@ export default WWebSso
1177
1172
  <br class="clear">
1178
1173
 
1179
1174
  <footer>
1180
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Mon Jul 14 2025 15:01:15 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1175
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Wed Jul 23 2025 15:26:00 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
1181
1176
  </footer>
1182
1177
 
1183
1178
  <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.4</a> on Mon Jul 14 2025 15:01:15 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.4</a> on Wed Jul 23 2025 15:26:00 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
75
75
  </footer>
76
76
 
77
77
  <script>prettyPrint();</script>
@@ -1,38 +1,39 @@
1
1
  import map from 'lodash-es/map.js'
2
2
  import ds from './src/schema/index.mjs'
3
- import provideUsers from './server/provideUsers.mjs'
3
+ import provideTabs from './server/provideTabs.mjs'
4
4
 
5
5
 
6
6
  async function provide() {
7
7
 
8
- let url = `http://localhost:11007/syncAndReplaceUsers?token=sys`
9
-
10
- let from = `pd`
11
-
12
- let rs = [
13
- ['pd-viewer', 'pd-普通瀏覽者'],
14
- ['pd-basic', 'pd-一般使用者'],
15
- ['pd-admin', 'pd-系統管理者'],
16
- ]
17
- rs = map(rs, ([key, name], k) => {
18
- let v = ds.users.funNew({
19
- order: 1000 + k,
20
- name,
21
- email: `${key}@example.com`,
22
- userId: 'id-for-admin',
23
- from,
24
- })
25
- v.id = `id-for-${key}`
26
- if (key === 'pd-admin') {
27
- v.isAdmin = 'y'
28
- }
29
- return v
30
- })
31
- console.log('rs', rs)
32
-
33
- let r = await provideUsers(url, from, rs)
34
- console.log('r.msg', r.msg)
35
-
8
+ // let url = `http://localhost:11007/syncAndReplaceUsers?token=sys`
9
+
10
+ // let from = `pd`
11
+
12
+ // let rs = [
13
+ // ['pd-viewer', 'pd-普通瀏覽者'],
14
+ // ['pd-basic', 'pd-一般使用者'],
15
+ // ['pd-admin', 'pd-系統管理者'],
16
+ // ]
17
+ // rs = map(rs, ([key, name], k) => {
18
+ // let v = ds.users.funNew({
19
+ // order: 1000 + k,
20
+ // name,
21
+ // email: `${key}@example.com`,
22
+ // userId: 'id-for-admin',
23
+ // from,
24
+ // })
25
+ // v.id = `id-for-${key}`
26
+ // if (key === 'pd-admin') {
27
+ // v.isAdmin = 'y'
28
+ // }
29
+ // return v
30
+ // })
31
+ // console.log('rs', rs)
32
+
33
+ // let r = await provideTabs(url, from, rs)
34
+ // console.log('r.msg', r.msg)
35
+
36
+ return Promise.reject(`incompleted`)
36
37
  }
37
38
 
38
39
  provide()
@@ -41,4 +42,4 @@ provide()
41
42
  })
42
43
 
43
44
 
44
- //node g.provideUsers.mjs
45
+ //node g.provideTabs.mjs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-web-sso",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "main": "dist/w-web-sso.umd.js",
5
5
  "dependencies": {
6
6
  "@mdi/js": "^7.4.47",
@@ -12,8 +12,7 @@
12
12
  "w-serv-hapi": "^1.0.60",
13
13
  "w-serv-orm": "^1.0.29",
14
14
  "w-syslog": "^1.0.6",
15
- "w-ui-loginout": "^1.0.9",
16
- "wsemi": "^1.8.15"
15
+ "wsemi": "^1.8.16"
17
16
  },
18
17
  "devDependencies": {
19
18
  "@vue/cli-plugin-babel": "^5.0.8",
@@ -519,13 +519,13 @@ function WWebSso(WOrm, url, db, pathSettings) {
519
519
  // return Promise.reject(`invalid ${key} from inp`)
520
520
  // }
521
521
 
522
- // //resave
523
- // inp = {
522
+ // //r
523
+ // let r = {
524
524
  // from,
525
525
  // [key]: vs,
526
526
  // }
527
527
 
528
- // return inp
528
+ // return r
529
529
  // }
530
530
 
531
531
 
@@ -574,13 +574,8 @@ function WWebSso(WOrm, url, db, pathSettings) {
574
574
  //funCheckAdmin
575
575
  let funCheckAdmin = (tk, u) => {
576
576
  // console.log('tk', tk, 'u', u)
577
- let b1 = s.getIsVerified(u) //須已驗證
578
- let b2 = !s.getIsExpired(u) //不能過期
579
- let b3 = !s.getIsBlocked(u) //不能封鎖中
580
- let b4 = s.getIsAdmin(u) //須為系統管理員
581
- let b5 = s.getIsActive(u) //須有效
582
- let b = b1 && b2 && b3 && b4 && b5
583
- // console.log('fun', 'tk', tk, 'u', u, b)
577
+ let b = s.checkUserAdmin(u)
578
+ // console.log('checkUserAdmin', b)
584
579
  return b
585
580
  }
586
581
 
@@ -0,0 +1,71 @@
1
+ import axios from 'axios'
2
+ import ltdtpick from 'wsemi/src/ltdtpick.mjs'
3
+ import genPm from 'wsemi/src/genPm.mjs'
4
+
5
+
6
+ async function provideTabs(url, keyTable, group, rows) {
7
+ //url: 伺服器提供的接入網址, 例如 http://localhost:11007/syncAndReplaceTabs?token={token}&keyTable={keyTable}
8
+ //keyTable: 資料表名
9
+ //from: 指陣列數據來源
10
+ //rows: 陣列數據
11
+
12
+ //pm
13
+ let pm = genPm()
14
+
15
+ // //ks
16
+ // let ks = [
17
+ // 'id',
18
+ // 'order',
19
+ // 'name',
20
+ // 'email',
21
+ // 'description',
22
+ // 'from',
23
+ // 'isAdmin',
24
+ // 'userId',
25
+ // 'timeCreate',
26
+ // 'userIdUpdate',
27
+ // 'timeUpdate',
28
+ // 'isActive',
29
+ // ]
30
+
31
+ // //ltdtpick
32
+ // users = ltdtpick(users, ks)
33
+
34
+ // //rin
35
+ // let rin = {
36
+ // from,
37
+ // users,
38
+ // }
39
+ // // rin = JSON.stringify(rin)
40
+
41
+ // //axios
42
+ // await axios({
43
+ // method: 'post',
44
+ // url,
45
+ // headers: { 'Content-Type': 'application/json; charset=utf-8' },
46
+ // data: rin,
47
+ // })
48
+ // .then((res) => {
49
+ // // console.log(res)
50
+ // let r = {
51
+ // msg: '成功傳輸Users清單',
52
+ // res,
53
+ // }
54
+ // pm.resolve(r)
55
+ // })
56
+ // .catch((err) => {
57
+ // // console.log(err)
58
+ // let r = {
59
+ // msg: '無法傳輸Users清單',
60
+ // res: err,
61
+ // }
62
+ // pm.reject(r)
63
+ // })
64
+
65
+ pm.reject(`incompleted`)
66
+
67
+ return pm
68
+ }
69
+
70
+
71
+ export default provideTabs
@@ -1,6 +1,7 @@
1
1
  import { Worker } from 'worker_threads'
2
2
  import genPm from 'wsemi/src/genPm.mjs'
3
3
 
4
+
4
5
  async function staIp(timeLength = 7, timeInterval = 'hr', opt = {}) {
5
6
  let pm = genPm()
6
7
 
@@ -7,10 +7,11 @@ import mapValues from 'lodash-es/mapValues.js'
7
7
  import merge from 'lodash-es/merge.js'
8
8
  import genPm from 'wsemi/src/genPm.mjs'
9
9
  import isestr from 'wsemi/src/isestr.mjs'
10
- import randomIntRange from 'wsemi/src/randomIntRange.mjs'
10
+ // import randomIntRange from 'wsemi/src/randomIntRange.mjs'
11
11
  import fsTreeFolder from 'wsemi/src/fsTreeFolder.mjs'
12
12
  import fsBuildReadStreamText from 'wsemi/src/fsBuildReadStreamText.mjs'
13
13
 
14
+
14
15
  async function staIp(timeLength = 7, timeInterval = 'hr', opt = {}) {
15
16
 
16
17
  //fdLog
@@ -1,6 +1,7 @@
1
1
  import { parentPort } from 'worker_threads'
2
2
  import staIp from './staIp.mjs'
3
3
 
4
+
4
5
  parentPort.on('message', async (param) => {
5
6
  try {
6
7
  let r = await staIp(param.timeLength, param.timeInterval, param.opt)
@@ -1,6 +1,7 @@
1
1
  import { Worker } from 'worker_threads'
2
2
  import genPm from 'wsemi/src/genPm.mjs'
3
3
 
4
+
4
5
  async function staToken(timeLength = 7, timeInterval = 'hr', opt = {}) {
5
6
  let pm = genPm()
6
7
 
@@ -7,10 +7,11 @@ import mapValues from 'lodash-es/mapValues.js'
7
7
  import merge from 'lodash-es/merge.js'
8
8
  import genPm from 'wsemi/src/genPm.mjs'
9
9
  import isestr from 'wsemi/src/isestr.mjs'
10
- import randomIntRange from 'wsemi/src/randomIntRange.mjs'
10
+ // import randomIntRange from 'wsemi/src/randomIntRange.mjs'
11
11
  import fsTreeFolder from 'wsemi/src/fsTreeFolder.mjs'
12
12
  import fsBuildReadStreamText from 'wsemi/src/fsBuildReadStreamText.mjs'
13
13
 
14
+
14
15
  async function staToken(timeLength = 7, timeInterval = 'hr', opt = {}) {
15
16
 
16
17
  //fdLog
@@ -1,6 +1,7 @@
1
1
  import { parentPort } from 'worker_threads'
2
2
  import staToken from './staToken.mjs'
3
3
 
4
+
4
5
  parentPort.on('message', async (param) => {
5
6
  try {
6
7
  let r = await staToken(param.timeLength, param.timeInterval, param.opt)
@@ -1,6 +1,7 @@
1
1
  import { Worker } from 'worker_threads'
2
2
  import genPm from 'wsemi/src/genPm.mjs'
3
3
 
4
+
4
5
  async function staUserAccountLogin(timeLength = 7, timeInterval = 'hr', opt = {}) {
5
6
  let pm = genPm()
6
7
 
@@ -1,6 +1,7 @@
1
1
  import { parentPort } from 'worker_threads'
2
2
  import staUserAccountLogin from './staUserAccountLogin.mjs'
3
3
 
4
+
4
5
  parentPort.on('message', async (param) => {
5
6
  try {
6
7
  let r = await staUserAccountLogin(param.timeLength, param.timeInterval, param.opt)
package/src/App.vue CHANGED
@@ -35,7 +35,6 @@ import isestr from 'wsemi/src/isestr.mjs'
35
35
  import iseobj from 'wsemi/src/iseobj.mjs'
36
36
  import isDev from 'wsemi/src/isDev.mjs'
37
37
  import waitFun from 'wsemi/src/waitFun.mjs'
38
- import wui from 'w-ui-loginout/src/WUiLoginout.mjs'
39
38
  import LoadingWinBar from './components/Common/LoadingWinBar.vue'
40
39
  import CheckYesNo from './components/Common/CheckYesNo.vue'
41
40
  import CheckYes from './components/Common/CheckYes.vue'
@@ -0,0 +1,98 @@
1
+ import axios from 'axios'
2
+ import get from 'lodash-es/get.js'
3
+ import isestr from 'wsemi/src/isestr.mjs'
4
+ import iseobj from 'wsemi/src/iseobj.mjs'
5
+ import isfun from 'wsemi/src/isfun.mjs'
6
+ import ispm from 'wsemi/src/ispm.mjs'
7
+
8
+
9
+ async function getUserByToken(url, tokenSelf, tokenTar, opt = {}) {
10
+ //url: http://localhost:11007/api/getSsoUserInfor
11
+ let errTemp = null
12
+
13
+ //check
14
+ if (!isestr(url)) {
15
+ return Promise.reject('invalid url')
16
+ }
17
+ if (!isestr(tokenSelf)) {
18
+ return Promise.reject('invalid tokenSelf')
19
+ }
20
+ if (!isestr(tokenTar)) {
21
+ return Promise.reject('invalid tokenTar')
22
+ }
23
+
24
+ //funConvertUser
25
+ let funConvertUser = get(opt, 'funConvertUser')
26
+
27
+ //url
28
+ url = `${url}?token={sysToken}&key=token&value={token}`
29
+ url = url.replaceAll('{sysToken}', tokenSelf) //系統介接用ssoToken
30
+ url = url.replaceAll('{token}', tokenTar)
31
+ // console.log('getUserByToken: url', url)
32
+
33
+ //get
34
+ let res = await axios.get(url)
35
+ .catch((err) => {
36
+ errTemp = err.toString()
37
+ })
38
+
39
+ //check
40
+ if (errTemp !== null) {
41
+ console.log('res', res)
42
+ console.log('errTemp', errTemp)
43
+ console.log(`can not get user by url[${url}]`)
44
+ return Promise.reject(`can not get user by url[${url}]`) //由SSO取得使用者資訊錯誤
45
+ }
46
+
47
+ //data
48
+ let data = get(res, 'data')
49
+
50
+ //state
51
+ let state = get(data, 'state', '')
52
+
53
+ //msg
54
+ let msg = get(data, 'msg')
55
+
56
+ //check
57
+ if (state !== 'success') {
58
+ console.log('res', res)
59
+ console.log('data', data)
60
+ console.log('state', state)
61
+ console.log('errTemp', msg)
62
+ console.log(`can not get user data by url[${url}]`)
63
+ return Promise.reject(`can not get user data by url[${url}]`) //取得使用者資訊失敗
64
+ }
65
+
66
+ //u
67
+ let u = msg
68
+ // console.log('getUserByToken u(msg)', u)
69
+
70
+ //check
71
+ if (!iseobj(u)) {
72
+ console.log(`no user data by url[${url}]`)
73
+ return Promise.reject(`no user data by url[${url}]`)
74
+ }
75
+
76
+ //check
77
+ if (isfun(funConvertUser)) {
78
+
79
+ //funConvertUser
80
+ u = funConvertUser(u)
81
+ if (ispm(u)) {
82
+ u = await u
83
+ }
84
+ // console.log('getUserByToken u(funConvertUser)', u)
85
+
86
+ //check
87
+ if (!iseobj(u)) {
88
+ console.log(`no user data after funConvertUser`)
89
+ return Promise.reject(`no user data after funConvertUser`)
90
+ }
91
+
92
+ }
93
+
94
+ return u
95
+ }
96
+
97
+
98
+ export default getUserByToken
@@ -0,0 +1,99 @@
1
+ import axios from 'axios'
2
+ import get from 'lodash-es/get.js'
3
+ import size from 'lodash-es/size.js'
4
+ import isestr from 'wsemi/src/isestr.mjs'
5
+ import iseobj from 'wsemi/src/iseobj.mjs'
6
+ import isfun from 'wsemi/src/isfun.mjs'
7
+ import ispm from 'wsemi/src/ispm.mjs'
8
+ import pmSeries from 'wsemi/src/pmSeries.mjs'
9
+
10
+
11
+ async function getUsersByToken(url, tokenSelf, opt = {}) {
12
+ //url: http://localhost:11007/api/getSsoUsersList
13
+ let errTemp = null
14
+
15
+ //check
16
+ if (!isestr(url)) {
17
+ return Promise.reject('invalid url')
18
+ }
19
+ if (!isestr(tokenSelf)) {
20
+ return Promise.reject('invalid tokenSelf')
21
+ }
22
+
23
+ //funConvertUser
24
+ let funConvertUser = get(opt, 'funConvertUser')
25
+
26
+ //url
27
+ url = `${url}?token={sysToken}`
28
+ url = url.replaceAll('{sysToken}', tokenSelf) //系統介接用ssoToken
29
+ // console.log('getUsersByToken: url', url)
30
+
31
+ //get
32
+ let res = await axios.get(url)
33
+ .catch((err) => {
34
+ errTemp = err.toString()
35
+ })
36
+
37
+ //check
38
+ if (errTemp !== null) {
39
+ console.log('res', res)
40
+ console.log('errTemp', errTemp)
41
+ console.log(`can not get users by url[${url}]`)
42
+ return Promise.reject(`can not get users by url[${url}]`) //由SSO取得使用者清單資訊錯誤
43
+ }
44
+
45
+ //data
46
+ let data = get(res, 'data')
47
+
48
+ //state
49
+ let state = get(data, 'state', '')
50
+
51
+ //msg
52
+ let msg = get(data, 'msg')
53
+
54
+ //check
55
+ if (state !== 'success') {
56
+ console.log('res', res)
57
+ console.log('data', data)
58
+ console.log('state', state)
59
+ console.log('errTemp', msg)
60
+ console.log(`can not get users data by url[${url}]`)
61
+ return Promise.reject(`can not get users data by url[${url}]`) //取得使用者清單資訊失敗
62
+ }
63
+
64
+ //us
65
+ let us = msg
66
+ // console.log('getUsersByToken us(msg)', us)
67
+
68
+ //check
69
+ if (size(us) === 0) {
70
+ console.log(`no users data by url[${url}]`)
71
+ return Promise.reject(`no users data by url[${url}]`)
72
+ }
73
+
74
+ //check
75
+ if (isfun(funConvertUser)) {
76
+ us = await pmSeries(us, async(u) => {
77
+
78
+ //funConvertUser
79
+ u = funConvertUser(u)
80
+ if (ispm(u)) {
81
+ u = await u
82
+ }
83
+
84
+ //check
85
+ if (!iseobj(u)) {
86
+ console.log(`no user data after funConvertUser`)
87
+ return Promise.reject(`no user data after funConvertUser`)
88
+ }
89
+
90
+ return u
91
+ })
92
+ // console.log('getUsersByToken us(funConvertUser)', us)
93
+ }
94
+
95
+ return us
96
+ }
97
+
98
+
99
+ export default getUsersByToken
@@ -13,12 +13,6 @@ import sep from 'wsemi/src/sep.mjs'
13
13
  import iseobj from 'wsemi/src/iseobj.mjs'
14
14
  import isestr from 'wsemi/src/isestr.mjs'
15
15
  import istimemsTZ from 'wsemi/src/istimemsTZ.mjs'
16
- import haskey from 'wsemi/src/haskey.mjs'
17
- import composeToTree from 'wsemi/src/composeToTree.mjs'
18
-
19
-
20
- // //dlm
21
- // let dlm = '/'
22
16
 
23
17
 
24
18
  function getNameNew(rows, key = 'name', nameBase = '', nameExt = '') {
@@ -339,6 +333,29 @@ function getIsActive(v) {
339
333
  }
340
334
 
341
335
 
336
+ function checkUserBasic(u) {
337
+ //須保留, 供內外部調用
338
+ let b1 = getIsVerified(u) //須已驗證
339
+ let b2 = !getIsExpired(u) //不能過期
340
+ let b3 = !getIsBlocked(u) //不能封鎖中
341
+ let b4 = getIsActive(u) //須有效
342
+ let b = b1 && b2 && b3 && b4
343
+ return b
344
+ }
345
+
346
+
347
+ function checkUserAdmin(u) {
348
+ //須保留, 供內外部調用
349
+ let b1 = getIsVerified(u) //須已驗證
350
+ let b2 = !getIsExpired(u) //不能過期
351
+ let b3 = !getIsBlocked(u) //不能封鎖中
352
+ let b4 = getIsAdmin(u) //須為系統管理員
353
+ let b5 = getIsActive(u) //須有效
354
+ let b = b1 && b2 && b3 && b4 && b5
355
+ return b
356
+ }
357
+
358
+
342
359
  export {
343
360
  getNameNew,
344
361
  // getAllBlocks,
@@ -351,5 +368,7 @@ export {
351
368
  getIsBlocked,
352
369
  getIsEnded,
353
370
  getIsAdmin,
354
- getIsActive
371
+ getIsActive,
372
+ checkUserBasic,
373
+ checkUserAdmin
355
374
  }