w-web-perm 1.0.7 → 1.0.9

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.
@@ -32,7 +32,8 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
32
32
  * @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
33
33
  * @param {String} db 輸入資料庫名稱字串
34
34
  * @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
35
- * @param {Function} verifyUser 輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
35
+ * @param {Function} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
36
+ * @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
36
37
  * @param {Object} [opt={}] 輸入設定物件,預設{}
37
38
  * @param {Integer} [opt.serverPort=11006] 輸入伺服器通訊port,預設11006
38
39
  * @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
@@ -46,10 +47,12 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
46
47
  * @param {String} [opt.mappingBy='email'] 輸入外部系統識別使用者token後所提供之資料物件,與權限系統之使用者資料物件,兩者間查找之對應欄位,可選'id'、'email'、'name',預設'email'
47
48
  * @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
48
49
  * @example
50
+ *
49
51
  * import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
50
52
  * import WWebPerm from './server/WWebPerm.mjs'
51
53
  * import getSettings from './g.getSettings.mjs'
52
54
  *
55
+ *
53
56
  * //st
54
57
  * let st = getSettings()
55
58
  *
@@ -63,6 +66,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
63
66
  *
64
67
  * serverPort: 11006,
65
68
  * subfolder: '', //mperm
69
+ * urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/
66
70
  *
67
71
  * webName: {
68
72
  * 'eng': 'Permission Service',
@@ -82,7 +86,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
82
86
  * return {
83
87
  * id: 'id-for-application',
84
88
  * name: 'application',
85
- * email: 'admin@example.com',
89
+ * email: 'application@example.com',
86
90
  * isAdmin: 'y',
87
91
  * }
88
92
  * }
@@ -90,7 +94,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
90
94
  * return {
91
95
  * id: 'id-for-admin',
92
96
  * name: 'tester',
93
- * email: 'admin@example.com',
97
+ * email: 'admin@example.com', //mappingBy為email, 開發階段時會使用email找到所建置之使用者資料
94
98
  * isAdmin: 'y',
95
99
  * }
96
100
  * }
@@ -99,20 +103,29 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
99
103
  * return {}
100
104
  * }
101
105
  *
102
- * let verifyUser = (user) => {
103
- * console.log('於生產環境時得加入驗證user機制')
106
+ * let verifyBrowserUser = (user, caller) => {
107
+ * console.log('verifyBrowserUser/user', user)
108
+ * // return false //測試無法登入
109
+ * console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
110
+ * return user.isAdmin === 'y' //測試僅系統管理者使用
111
+ * }
112
+ *
113
+ * let verifyAppUser = (user, caller) => {
114
+ * console.log('verifyAppUser/user', user)
115
+ * // return false //測試無法登入
116
+ * console.log('於生產環境時得加入限制應用程式使用者身份機制')
104
117
  * return user.isAdmin === 'y' //測試僅系統管理者使用
105
118
  * }
106
119
  *
107
120
  * //WWebPerm
108
- * let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt)
121
+ * let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
109
122
  *
110
123
  * instWWebPerm.on('error', (err) => {
111
124
  * console.log(err)
112
125
  * })
113
126
  *
114
127
  */
115
- function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
128
+ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt = {}) {
116
129
  let instWServHapiServer = null
117
130
 
118
131
 
@@ -144,10 +157,17 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
144
157
  }
145
158
 
146
159
 
147
- //check verifyUser
148
- if (!isfun(verifyUser)) {
149
- console.log('invalid verifyUser', verifyUser)
150
- throw new Error('invalid verifyUser')
160
+ //check verifyBrowserUser
161
+ if (!isfun(verifyBrowserUser)) {
162
+ console.log('invalid verifyBrowserUser', verifyBrowserUser)
163
+ throw new Error('invalid verifyBrowserUser')
164
+ }
165
+
166
+
167
+ //check verifyAppUser
168
+ if (!isfun(verifyAppUser)) {
169
+ console.log('invalid verifyAppUser', verifyAppUser)
170
+ throw new Error('invalid verifyAppUser')
151
171
  }
152
172
 
153
173
 
@@ -265,8 +285,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
265
285
  }
266
286
 
267
287
 
268
- //getTokenUserForSelf
269
- let getTokenUserForSelf = async(token) => {
288
+ //getTokenUser
289
+ let getTokenUser = async(token) => {
270
290
 
271
291
  //userSelf
272
292
  let userSelf = null
@@ -347,8 +367,18 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
347
367
  }
348
368
  // console.log('userFind(isAdmin)', userFind)
349
369
 
350
- //verifyUser
351
- let b = verifyUser(userFind)
370
+ return userFind
371
+ }
372
+
373
+
374
+ //getAndVerifyBrowserTokenUser
375
+ let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
376
+
377
+ //getTokenUser
378
+ let userSelf = await getTokenUser(token)
379
+
380
+ //verifyBrowserUser
381
+ let b = verifyBrowserUser(userSelf, caller)
352
382
  if (ispm(b)) {
353
383
  b = await b
354
384
  }
@@ -356,12 +386,34 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
356
386
  //check
357
387
  if (!b) {
358
388
  console.log('userSelf', userSelf)
359
- console.log('userFind', userFind)
360
- console.log('user does not have permission')
389
+ console.log(`user does not have permission`)
361
390
  return Promise.reject(`user does not have permission`)
362
391
  }
363
392
 
364
- return userFind
393
+ return userSelf
394
+ }
395
+
396
+
397
+ //getAndVerifyAppTokenUser
398
+ let getAndVerifyAppTokenUser = async (token, caller = '') => {
399
+
400
+ //getTokenUser
401
+ let userSelf = await getTokenUser(token)
402
+
403
+ //verifyAppUser
404
+ let b = verifyAppUser(userSelf, caller)
405
+ if (ispm(b)) {
406
+ b = await b
407
+ }
408
+
409
+ //check
410
+ if (!b) {
411
+ console.log('userSelf', userSelf)
412
+ console.log(`user does not have permission`)
413
+ return Promise.reject(`user does not have permission`)
414
+ }
415
+
416
+ return userSelf
365
417
  }
366
418
 
367
419
 
@@ -589,14 +641,14 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
589
641
  // console.log('getUserByToken', req)
590
642
 
591
643
  async function core() {
592
- //提供對象為browser使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 確認後回傳該使用者(系統管理員)資訊物件
644
+ //提供對象為browser使用者, 須先檢測token是否有效, 確認後回傳該使用者之資訊物件
593
645
 
594
646
  //token
595
647
  let token = get(req, 'query.token', '')
596
648
  // console.log('token', token)
597
649
 
598
- //getGenUserByUserId
599
- let userSelf = await getTokenUserForSelf(token)
650
+ //getAndVerifyBrowserTokenUser
651
+ let userSelf = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
600
652
  // console.log('userSelf', userSelf)
601
653
 
602
654
  //check
@@ -607,11 +659,6 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
607
659
  return Promise.reject(`token does not have permission`)
608
660
  }
609
661
 
610
- // //check
611
- // if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
612
- // return Promise.reject(`user does not have permission`)
613
- // }
614
-
615
662
  return userSelf
616
663
  }
617
664
 
@@ -629,14 +676,14 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
629
676
  // console.log('getPerm', req)
630
677
 
631
678
  async function core() {
632
- //提供對象為node與browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者權限資訊物件
679
+ //提供對象為node與browser使用者, node實際也為轉發之browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
633
680
 
634
681
  //parseToken
635
682
  let token = parseToken(req)
636
683
  // console.log('token', token)
637
684
 
638
- //getGenUserByUserId
639
- let userLogin = await getTokenUserForSelf(token)
685
+ //getAndVerifyBrowserTokenUser
686
+ let userLogin = await getAndVerifyBrowserTokenUser(token, 'getPerm')
640
687
  // console.log('userLogin', userLogin)
641
688
 
642
689
  //check
@@ -688,14 +735,14 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
688
735
  // console.log('getPermById', req)
689
736
 
690
737
  async function core() {
691
- //提供對象為node使用者, 且認定權限系統須系統管理員才能使用, 須先檢測token是否為系統管理員, 再由query取得欲查詢的使用者userId, 再由其userId查詢回傳該使用者權限資訊物件
738
+ //提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再由query取得欲查詢的使用者userId, 再由其userId查詢回傳該使用者權限資訊物件
692
739
 
693
740
  //token
694
741
  let token = get(req, 'query.token', '')
695
742
  // console.log('token', token)
696
743
 
697
- //getGenUserByUserId
698
- let userSelf = await getTokenUserForSelf(token)
744
+ //getAndVerifyAppTokenUser
745
+ let userSelf = await getAndVerifyAppTokenUser(token, 'getPermById')
699
746
  // console.log('userSelf', userSelf)
700
747
 
701
748
  //check
@@ -706,11 +753,6 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
706
753
  return Promise.reject(`token does not have permission`)
707
754
  }
708
755
 
709
- // //check
710
- // if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
711
- // return Promise.reject(`user does not have permission`)
712
- // }
713
-
714
756
  //userId
715
757
  let userId = get(req, 'query.userId', '')
716
758
  // console.log('userId', userId)
@@ -745,12 +787,13 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
745
787
  // console.log('payload', req.payload)
746
788
 
747
789
  async function core() {
790
+ //提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
748
791
 
749
792
  //token
750
793
  let token = get(req, 'query.token', '')
751
794
 
752
- //getTokenUserForSelf
753
- let user = await getTokenUserForSelf(token)
795
+ //getAndVerifyAppTokenUser
796
+ let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceUsers')
754
797
 
755
798
  //check
756
799
  if (!iseobj(user)) {
@@ -784,12 +827,13 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
784
827
  // console.log('payload', req.payload)
785
828
 
786
829
  async function core() {
830
+ //提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
787
831
 
788
832
  //token
789
833
  let token = get(req, 'query.token', '')
790
834
 
791
- //getTokenUserForSelf
792
- let user = await getTokenUserForSelf(token)
835
+ //getAndVerifyAppTokenUser
836
+ let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceTargets')
793
837
 
794
838
  //check
795
839
  if (!iseobj(user)) {
@@ -823,12 +867,13 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
823
867
  // console.log('payload', req.payload)
824
868
 
825
869
  async function core() {
870
+ //提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
826
871
 
827
872
  //token
828
873
  let token = get(req, 'query.token', '')
829
874
 
830
- //getTokenUserForSelf
831
- let user = await getTokenUserForSelf(token)
875
+ //getAndVerifyAppTokenUser
876
+ let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceRuleGroups')
832
877
 
833
878
  //check
834
879
  if (!iseobj(user)) {
package/srv.mjs CHANGED
@@ -53,14 +53,22 @@ let getUserByToken = async (token) => {
53
53
  return {}
54
54
  }
55
55
 
56
- let verifyUser = (user) => {
56
+ let verifyBrowserUser = (user, caller) => {
57
+ console.log('verifyBrowserUser/user', user)
57
58
  // return false //測試無法登入
58
- console.log('於生產環境時得加入驗證user機制')
59
+ console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
60
+ return user.isAdmin === 'y' //測試僅系統管理者使用
61
+ }
62
+
63
+ let verifyAppUser = (user, caller) => {
64
+ console.log('verifyAppUser/user', user)
65
+ // return false //測試無法登入
66
+ console.log('於生產環境時得加入限制應用程式使用者身份機制')
59
67
  return user.isAdmin === 'y' //測試僅系統管理者使用
60
68
  }
61
69
 
62
70
  //WWebPerm
63
- let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt)
71
+ let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
64
72
 
65
73
  instWWebPerm.on('error', (err) => {
66
74
  console.log(err)