w-web-perm 1.0.6 → 1.0.8
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.
- package/README.md +16 -5
- package/dist/index.tmp +3 -1
- package/dist/js/app-legacy.b07e0c72.js +2 -0
- package/dist/js/app-legacy.b07e0c72.js.map +1 -0
- package/dist/js/app.2dee844f.js +2 -0
- package/dist/js/app.2dee844f.js.map +1 -0
- package/dist/js/{chunk-vendors.827f1c54.js → chunk-vendors-legacy.02559087.js} +2 -2
- package/dist/js/chunk-vendors-legacy.02559087.js.map +1 -0
- package/dist/js/{chunk-vendors-legacy.827f1c54.js → chunk-vendors.02559087.js} +2 -2
- package/dist/js/chunk-vendors.02559087.js.map +1 -0
- package/dist/w-web-perm.umd.js +2 -2
- package/dist/w-web-perm.umd.js.map +1 -1
- package/docs/WWebPerm.html +82 -6
- package/docs/WWebPerm.mjs.html +130 -45
- package/docs/index.html +1 -1
- package/package.json +2 -2
- package/public/index.html +7 -0
- package/server/WWebPerm.mjs +129 -44
- package/src/App.vue +16 -1
- package/src/store/mutations.mjs +6 -12
- package/srv.mjs +15 -5
- package/tableTags-web-perm.json +1 -1
- package/dist/js/app-legacy.4e39a313.js +0 -2
- package/dist/js/app-legacy.4e39a313.js.map +0 -1
- package/dist/js/app.4e39a313.js +0 -2
- package/dist/js/app.4e39a313.js.map +0 -1
- package/dist/js/chunk-vendors-legacy.827f1c54.js.map +0 -1
- package/dist/js/chunk-vendors.827f1c54.js.map +0 -1
package/docs/WWebPerm.mjs.html
CHANGED
|
@@ -63,6 +63,7 @@ import strright from 'wsemi/src/strright.mjs'
|
|
|
63
63
|
import strdelright from 'wsemi/src/strdelright.mjs'
|
|
64
64
|
import pm2resolve from 'wsemi/src/pm2resolve.mjs'
|
|
65
65
|
import fsIsFolder from 'wsemi/src/fsIsFolder.mjs'
|
|
66
|
+
import fsIsFile from 'wsemi/src/fsIsFile.mjs'
|
|
66
67
|
import replace from 'wsemi/src/replace.mjs'
|
|
67
68
|
import WServHapiServer from 'w-serv-hapi/src/WServHapiServer.mjs'
|
|
68
69
|
import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
|
|
@@ -78,7 +79,8 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
78
79
|
* @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
|
|
79
80
|
* @param {String} db 輸入資料庫名稱字串
|
|
80
81
|
* @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
|
|
81
|
-
* @param {Function}
|
|
82
|
+
* @param {Function} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
83
|
+
* @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
82
84
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
83
85
|
* @param {Integer} [opt.serverPort=11006] 輸入伺服器通訊port,預設11006
|
|
84
86
|
* @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
|
|
@@ -88,13 +90,16 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
88
90
|
* @param {Object} [opt.webDescription={}] 輸入站台描述物件,至少包含語系eng與cht鍵的名稱,預設{}
|
|
89
91
|
* @param {String} [opt.webLogo=''] 輸入站台logo字串,採base64格式,預設''
|
|
90
92
|
* @param {String} [opt.subfolder=''] 輸入站台所在子目錄字串,提供站台位於內網採反向代理進行服務時,故需支援位於子目錄情形,預設''
|
|
93
|
+
* @param {String} [opt.urlRedirect=''] 輸入錯誤時自動轉址字串,提供站台例如無法登入或驗證失敗時須自動轉址,預設''
|
|
91
94
|
* @param {String} [opt.mappingBy='email'] 輸入外部系統識別使用者token後所提供之資料物件,與權限系統之使用者資料物件,兩者間查找之對應欄位,可選'id'、'email'、'name',預設'email'
|
|
92
95
|
* @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
|
|
93
96
|
* @example
|
|
97
|
+
*
|
|
94
98
|
* import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
|
|
95
99
|
* import WWebPerm from './server/WWebPerm.mjs'
|
|
96
100
|
* import getSettings from './g.getSettings.mjs'
|
|
97
101
|
*
|
|
102
|
+
*
|
|
98
103
|
* //st
|
|
99
104
|
* let st = getSettings()
|
|
100
105
|
*
|
|
@@ -108,6 +113,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
108
113
|
*
|
|
109
114
|
* serverPort: 11006,
|
|
110
115
|
* subfolder: '', //mperm
|
|
116
|
+
* urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/
|
|
111
117
|
*
|
|
112
118
|
* webName: {
|
|
113
119
|
* 'eng': 'Permission Service',
|
|
@@ -127,7 +133,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
127
133
|
* return {
|
|
128
134
|
* id: 'id-for-application',
|
|
129
135
|
* name: 'application',
|
|
130
|
-
* email: '
|
|
136
|
+
* email: 'application@example.com',
|
|
131
137
|
* isAdmin: 'y',
|
|
132
138
|
* }
|
|
133
139
|
* }
|
|
@@ -135,7 +141,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
135
141
|
* return {
|
|
136
142
|
* id: 'id-for-admin',
|
|
137
143
|
* name: 'tester',
|
|
138
|
-
* email: 'admin@example.com',
|
|
144
|
+
* email: 'admin@example.com', //mappingBy為email, 開發階段時會使用email找到所建置之使用者資料
|
|
139
145
|
* isAdmin: 'y',
|
|
140
146
|
* }
|
|
141
147
|
* }
|
|
@@ -144,20 +150,29 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
144
150
|
* return {}
|
|
145
151
|
* }
|
|
146
152
|
*
|
|
147
|
-
* let
|
|
148
|
-
* console.log('
|
|
153
|
+
* let verifyBrowserUser = (user, caller) => {
|
|
154
|
+
* console.log('verifyBrowserUser/user', user)
|
|
155
|
+
* // return false //測試無法登入
|
|
156
|
+
* console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
157
|
+
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
158
|
+
* }
|
|
159
|
+
*
|
|
160
|
+
* let verifyAppUser = (user, caller) => {
|
|
161
|
+
* console.log('verifyAppUser/user', user)
|
|
162
|
+
* // return false //測試無法登入
|
|
163
|
+
* console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
149
164
|
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
150
165
|
* }
|
|
151
166
|
*
|
|
152
167
|
* //WWebPerm
|
|
153
|
-
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken,
|
|
168
|
+
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt)
|
|
154
169
|
*
|
|
155
170
|
* instWWebPerm.on('error', (err) => {
|
|
156
171
|
* console.log(err)
|
|
157
172
|
* })
|
|
158
173
|
*
|
|
159
174
|
*/
|
|
160
|
-
function WWebPerm(WOrm, url, db, getUserByToken,
|
|
175
|
+
function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUser, opt = {}) {
|
|
161
176
|
let instWServHapiServer = null
|
|
162
177
|
|
|
163
178
|
|
|
@@ -189,10 +204,17 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
189
204
|
}
|
|
190
205
|
|
|
191
206
|
|
|
192
|
-
//check
|
|
193
|
-
if (!isfun(
|
|
194
|
-
console.log('invalid
|
|
195
|
-
throw new Error('invalid
|
|
207
|
+
//check verifyBrowserUser
|
|
208
|
+
if (!isfun(verifyBrowserUser)) {
|
|
209
|
+
console.log('invalid verifyBrowserUser', verifyBrowserUser)
|
|
210
|
+
throw new Error('invalid verifyBrowserUser')
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
//check verifyAppUser
|
|
215
|
+
if (!isfun(verifyAppUser)) {
|
|
216
|
+
console.log('invalid verifyAppUser', verifyAppUser)
|
|
217
|
+
throw new Error('invalid verifyAppUser')
|
|
196
218
|
}
|
|
197
219
|
|
|
198
220
|
|
|
@@ -240,6 +262,10 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
240
262
|
}
|
|
241
263
|
|
|
242
264
|
|
|
265
|
+
//urlRedirect
|
|
266
|
+
let urlRedirect = get(opt, 'urlRedirect', '')
|
|
267
|
+
|
|
268
|
+
|
|
243
269
|
//mappingBy
|
|
244
270
|
let mappingBy = get(opt, 'mappingBy', '')
|
|
245
271
|
if (mappingBy !== 'id' && mappingBy !== 'email' && mappingBy !== 'name') {
|
|
@@ -306,8 +332,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
306
332
|
}
|
|
307
333
|
|
|
308
334
|
|
|
309
|
-
//
|
|
310
|
-
let
|
|
335
|
+
//getTokenUser
|
|
336
|
+
let getTokenUser = async(token) => {
|
|
311
337
|
|
|
312
338
|
//userSelf
|
|
313
339
|
let userSelf = null
|
|
@@ -321,7 +347,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
321
347
|
|
|
322
348
|
//check
|
|
323
349
|
if (!iseobj(userSelf)) {
|
|
324
|
-
console.log(`
|
|
350
|
+
console.log(`token`, token)
|
|
351
|
+
console.log(`can not find the user from token`)
|
|
325
352
|
return Promise.reject(`can not find the user from token`)
|
|
326
353
|
}
|
|
327
354
|
|
|
@@ -330,22 +357,26 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
330
357
|
let id = get(userSelf, 'id', '')
|
|
331
358
|
if (!isestr(id)) {
|
|
332
359
|
console.log('userSelf', userSelf)
|
|
360
|
+
console.log('can not get the userId')
|
|
333
361
|
return Promise.reject(`can not get the userId`)
|
|
334
362
|
}
|
|
335
363
|
let email = get(userSelf, 'email', '')
|
|
336
364
|
if (!isestr(email)) {
|
|
337
365
|
console.log('userSelf', userSelf)
|
|
366
|
+
console.log('can not get the email of user')
|
|
338
367
|
return Promise.reject(`can not get the email of user`)
|
|
339
368
|
}
|
|
340
369
|
let name = get(userSelf, 'name', '')
|
|
341
370
|
if (!isestr(name)) {
|
|
342
371
|
console.log('userSelf', userSelf)
|
|
372
|
+
console.log('can not get userName')
|
|
343
373
|
return Promise.reject(`can not get userName`)
|
|
344
374
|
}
|
|
345
375
|
let isAdmin = get(userSelf, 'isAdmin', '')
|
|
346
376
|
if (isAdmin !== 'y' && isAdmin !== 'n') {
|
|
347
377
|
console.log('userSelf', userSelf)
|
|
348
378
|
console.log('userSelf.isAdmin is not y or n', userSelf.isAdmin)
|
|
379
|
+
console.log('can not get the role of user')
|
|
349
380
|
return Promise.reject(`can not get the role of user`)
|
|
350
381
|
}
|
|
351
382
|
}
|
|
@@ -358,6 +389,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
358
389
|
if (!isestr(vSelf)) {
|
|
359
390
|
console.log('userSelf', userSelf)
|
|
360
391
|
console.log('mappingBy', mappingBy)
|
|
392
|
+
console.log('can not get the prop of user by mappingBy')
|
|
361
393
|
return Promise.reject(`can not get the prop of user by mappingBy`)
|
|
362
394
|
}
|
|
363
395
|
|
|
@@ -370,6 +402,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
370
402
|
if (!iseobj(userFind)) {
|
|
371
403
|
console.log('userSelf', userSelf)
|
|
372
404
|
console.log('mappingBy', mappingBy)
|
|
405
|
+
console.log('can not get the user from perm')
|
|
373
406
|
return Promise.reject(`can not get the user from perm`)
|
|
374
407
|
}
|
|
375
408
|
|
|
@@ -381,8 +414,18 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
381
414
|
}
|
|
382
415
|
// console.log('userFind(isAdmin)', userFind)
|
|
383
416
|
|
|
384
|
-
|
|
385
|
-
|
|
417
|
+
return userFind
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
|
|
421
|
+
//getAndVerifyBrowserTokenUser
|
|
422
|
+
let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
|
|
423
|
+
|
|
424
|
+
//getTokenUser
|
|
425
|
+
let userSelf = await getTokenUser(token)
|
|
426
|
+
|
|
427
|
+
//verifyBrowserUser
|
|
428
|
+
let b = verifyBrowserUser(userSelf, caller)
|
|
386
429
|
if (ispm(b)) {
|
|
387
430
|
b = await b
|
|
388
431
|
}
|
|
@@ -390,16 +433,41 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
390
433
|
//check
|
|
391
434
|
if (!b) {
|
|
392
435
|
console.log('userSelf', userSelf)
|
|
393
|
-
console.log(
|
|
436
|
+
console.log(`user does not have permission`)
|
|
394
437
|
return Promise.reject(`user does not have permission`)
|
|
395
438
|
}
|
|
396
439
|
|
|
397
|
-
return
|
|
440
|
+
return userSelf
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
|
|
444
|
+
//getAndVerifyAppTokenUser
|
|
445
|
+
let getAndVerifyAppTokenUser = async (token, caller = '') => {
|
|
446
|
+
|
|
447
|
+
//getTokenUser
|
|
448
|
+
let userSelf = await getTokenUser(token)
|
|
449
|
+
|
|
450
|
+
//verifyAppUser
|
|
451
|
+
let b = verifyAppUser(userSelf, caller)
|
|
452
|
+
if (ispm(b)) {
|
|
453
|
+
b = await b
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
//check
|
|
457
|
+
if (!b) {
|
|
458
|
+
console.log('userSelf', userSelf)
|
|
459
|
+
console.log(`user does not have permission`)
|
|
460
|
+
return Promise.reject(`user does not have permission`)
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
return userSelf
|
|
398
464
|
}
|
|
399
465
|
|
|
400
466
|
|
|
401
467
|
//parsePayload
|
|
402
468
|
let parsePayload = async (req, key) => {
|
|
469
|
+
|
|
470
|
+
//inp
|
|
403
471
|
let inp = get(req, 'payload')
|
|
404
472
|
|
|
405
473
|
//to obj
|
|
@@ -410,6 +478,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
410
478
|
//check
|
|
411
479
|
if (!iseobj(inp)) {
|
|
412
480
|
console.log('inp', inp)
|
|
481
|
+
console.log('invalid inp from req')
|
|
413
482
|
return Promise.reject(`invalid inp from req`)
|
|
414
483
|
}
|
|
415
484
|
|
|
@@ -420,6 +489,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
420
489
|
if (!isestr(from)) {
|
|
421
490
|
console.log('inp', inp)
|
|
422
491
|
console.log('from', from)
|
|
492
|
+
console.log('invalid from from inp')
|
|
423
493
|
return Promise.reject(`invalid from from inp`)
|
|
424
494
|
}
|
|
425
495
|
|
|
@@ -434,6 +504,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
434
504
|
if (!isearr(vs)) {
|
|
435
505
|
console.log('inp', inp)
|
|
436
506
|
console.log(key, vs)
|
|
507
|
+
console.log(`invalid ${key} from inp`)
|
|
437
508
|
return Promise.reject(`invalid ${key} from inp`)
|
|
438
509
|
}
|
|
439
510
|
|
|
@@ -458,6 +529,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
458
529
|
if (!isestr(from)) {
|
|
459
530
|
console.log('params', params)
|
|
460
531
|
console.log('from', from)
|
|
532
|
+
console.log(`invalid from`)
|
|
461
533
|
return Promise.reject(`invalid from`)
|
|
462
534
|
}
|
|
463
535
|
|
|
@@ -469,6 +541,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
469
541
|
if (!isearr(vs)) {
|
|
470
542
|
console.log('params', params)
|
|
471
543
|
console.log(key, vs)
|
|
544
|
+
console.log(`invalid ${key}`)
|
|
472
545
|
return Promise.reject(`invalid ${key}`)
|
|
473
546
|
}
|
|
474
547
|
|
|
@@ -539,7 +612,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
539
612
|
|
|
540
613
|
//check
|
|
541
614
|
if (!iseobj(urs)) {
|
|
542
|
-
console.log('
|
|
615
|
+
console.log('userId', userId)
|
|
616
|
+
console.log(`can not get permrules`)
|
|
543
617
|
return Promise.reject(`can not get permrules`)
|
|
544
618
|
}
|
|
545
619
|
|
|
@@ -567,9 +641,18 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
567
641
|
let fnEntryOut = 'index.html'
|
|
568
642
|
try {
|
|
569
643
|
let fpEntryIn = path.resolve(pathStaticFiles, fnEntryIn)
|
|
644
|
+
if (!fsIsFile(fpEntryIn)) {
|
|
645
|
+
fpEntryIn = path.resolve(pathStaticFiles, fnEntryOut) //本機開發另使用html替代tmp
|
|
646
|
+
}
|
|
647
|
+
if (!fsIsFile(fpEntryIn)) {
|
|
648
|
+
console.log('fpEntryIn', fpEntryIn)
|
|
649
|
+
throw new Error(`invalid fpEntryIn`)
|
|
650
|
+
}
|
|
570
651
|
let fpEntryOut = path.resolve(pathStaticFiles, fnEntryOut)
|
|
571
652
|
let c = fs.readFileSync(fpEntryIn, 'utf8')
|
|
653
|
+
c = replace(c, '/mperm/', '{sfd}/') //方法同genEntry
|
|
572
654
|
c = replace(c, '{sfd}', subfolder)
|
|
655
|
+
c = replace(c, '{urlRedirect}', urlRedirect)
|
|
573
656
|
fs.writeFileSync(fpEntryOut, c, 'utf8')
|
|
574
657
|
}
|
|
575
658
|
catch (err) {
|
|
@@ -605,28 +688,24 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
605
688
|
// console.log('getUserByToken', req)
|
|
606
689
|
|
|
607
690
|
async function core() {
|
|
608
|
-
//提供對象為browser使用者,
|
|
691
|
+
//提供對象為browser使用者, 須先檢測token是否有效, 確認後回傳該使用者之資訊物件
|
|
609
692
|
|
|
610
693
|
//token
|
|
611
694
|
let token = get(req, 'query.token', '')
|
|
612
695
|
// console.log('token', token)
|
|
613
696
|
|
|
614
|
-
//
|
|
615
|
-
let userSelf = await
|
|
697
|
+
//getAndVerifyBrowserTokenUser
|
|
698
|
+
let userSelf = await getAndVerifyBrowserTokenUser(token)
|
|
616
699
|
// console.log('userSelf', userSelf)
|
|
617
700
|
|
|
618
701
|
//check
|
|
619
702
|
if (!iseobj(userSelf)) {
|
|
620
703
|
console.log('token', token)
|
|
621
704
|
console.log('[API]getUserByToken/check userSelf: invalid userSelf')
|
|
705
|
+
console.log(`token does not have permission`)
|
|
622
706
|
return Promise.reject(`token does not have permission`)
|
|
623
707
|
}
|
|
624
708
|
|
|
625
|
-
// //check
|
|
626
|
-
// if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
|
|
627
|
-
// return Promise.reject(`user does not have permission`)
|
|
628
|
-
// }
|
|
629
|
-
|
|
630
709
|
return userSelf
|
|
631
710
|
}
|
|
632
711
|
|
|
@@ -644,20 +723,21 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
644
723
|
// console.log('getPerm', req)
|
|
645
724
|
|
|
646
725
|
async function core() {
|
|
647
|
-
//提供對象為node與browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId
|
|
726
|
+
//提供對象為node與browser使用者, node實際也為轉發之browser使用者, 須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
|
|
648
727
|
|
|
649
728
|
//parseToken
|
|
650
729
|
let token = parseToken(req)
|
|
651
730
|
// console.log('token', token)
|
|
652
731
|
|
|
653
|
-
//
|
|
654
|
-
let userLogin = await
|
|
732
|
+
//getAndVerifyBrowserTokenUser
|
|
733
|
+
let userLogin = await getAndVerifyBrowserTokenUser(token)
|
|
655
734
|
// console.log('userLogin', userLogin)
|
|
656
735
|
|
|
657
736
|
//check
|
|
658
737
|
if (!iseobj(userLogin)) {
|
|
659
738
|
console.log('token', token)
|
|
660
739
|
console.log('[API]getPerm/check userLogin: invalid userLogin')
|
|
740
|
+
console.log(`token does not have permission`)
|
|
661
741
|
return Promise.reject(`token does not have permission`)
|
|
662
742
|
}
|
|
663
743
|
|
|
@@ -669,6 +749,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
669
749
|
if (!isestr(userId)) {
|
|
670
750
|
console.log('userLogin', userLogin)
|
|
671
751
|
console.log('[API]getPerm/check userId: invalid userId')
|
|
752
|
+
console.log(`token does not have permission`)
|
|
672
753
|
return Promise.reject(`token does not have permission`)
|
|
673
754
|
}
|
|
674
755
|
|
|
@@ -680,6 +761,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
680
761
|
if (!iseobj(r)) {
|
|
681
762
|
console.log('userLogin', userLogin)
|
|
682
763
|
console.log('[API]getPerm/getGenUserAndRulesByUserId: user does not have permrules')
|
|
764
|
+
console.log(`token does not have permission`)
|
|
683
765
|
return Promise.reject(`token does not have permission`)
|
|
684
766
|
}
|
|
685
767
|
|
|
@@ -700,28 +782,24 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
700
782
|
// console.log('getPermById', req)
|
|
701
783
|
|
|
702
784
|
async function core() {
|
|
703
|
-
//提供對象為node使用者,
|
|
785
|
+
//提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再由query取得欲查詢的使用者userId, 再由其userId查詢回傳該使用者權限資訊物件
|
|
704
786
|
|
|
705
787
|
//token
|
|
706
788
|
let token = get(req, 'query.token', '')
|
|
707
789
|
// console.log('token', token)
|
|
708
790
|
|
|
709
|
-
//
|
|
710
|
-
let userSelf = await
|
|
791
|
+
//getAndVerifyAppTokenUser
|
|
792
|
+
let userSelf = await getAndVerifyAppTokenUser(token, 'getPermById')
|
|
711
793
|
// console.log('userSelf', userSelf)
|
|
712
794
|
|
|
713
795
|
//check
|
|
714
796
|
if (!iseobj(userSelf)) {
|
|
715
797
|
console.log('token', token)
|
|
716
798
|
console.log('[API]getPermById/check userSelf: invalid userSelf')
|
|
799
|
+
console.log(`token does not have permission`)
|
|
717
800
|
return Promise.reject(`token does not have permission`)
|
|
718
801
|
}
|
|
719
802
|
|
|
720
|
-
// //check
|
|
721
|
-
// if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
|
|
722
|
-
// return Promise.reject(`user does not have permission`)
|
|
723
|
-
// }
|
|
724
|
-
|
|
725
803
|
//userId
|
|
726
804
|
let userId = get(req, 'query.userId', '')
|
|
727
805
|
// console.log('userId', userId)
|
|
@@ -734,6 +812,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
734
812
|
if (!iseobj(r)) {
|
|
735
813
|
console.log('userSelf', userSelf)
|
|
736
814
|
console.log('[API]getPermById/getGenUserAndRulesByUserId: user does not have permrules')
|
|
815
|
+
console.log(`user does not have permrules`)
|
|
737
816
|
return Promise.reject(`user does not have permrules`)
|
|
738
817
|
}
|
|
739
818
|
|
|
@@ -755,17 +834,19 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
755
834
|
// console.log('payload', req.payload)
|
|
756
835
|
|
|
757
836
|
async function core() {
|
|
837
|
+
//提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
|
|
758
838
|
|
|
759
839
|
//token
|
|
760
840
|
let token = get(req, 'query.token', '')
|
|
761
841
|
|
|
762
|
-
//
|
|
763
|
-
let user = await
|
|
842
|
+
//getAndVerifyAppTokenUser
|
|
843
|
+
let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceUsers')
|
|
764
844
|
|
|
765
845
|
//check
|
|
766
846
|
if (!iseobj(user)) {
|
|
767
847
|
console.log('token', token)
|
|
768
848
|
console.log('[API]syncAndReplaceUsers/check user: invalid user')
|
|
849
|
+
console.log(`token does not have permission`)
|
|
769
850
|
return Promise.reject(`token does not have permission`)
|
|
770
851
|
}
|
|
771
852
|
|
|
@@ -793,17 +874,19 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
793
874
|
// console.log('payload', req.payload)
|
|
794
875
|
|
|
795
876
|
async function core() {
|
|
877
|
+
//提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
|
|
796
878
|
|
|
797
879
|
//token
|
|
798
880
|
let token = get(req, 'query.token', '')
|
|
799
881
|
|
|
800
|
-
//
|
|
801
|
-
let user = await
|
|
882
|
+
//getAndVerifyAppTokenUser
|
|
883
|
+
let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceTargets')
|
|
802
884
|
|
|
803
885
|
//check
|
|
804
886
|
if (!iseobj(user)) {
|
|
805
887
|
console.log('token', token)
|
|
806
888
|
console.log('[API]syncAndReplaceTargets/check user: invalid user')
|
|
889
|
+
console.log(`token does not have permission`)
|
|
807
890
|
return Promise.reject(`token does not have permission`)
|
|
808
891
|
}
|
|
809
892
|
|
|
@@ -831,17 +914,19 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
|
831
914
|
// console.log('payload', req.payload)
|
|
832
915
|
|
|
833
916
|
async function core() {
|
|
917
|
+
//提供對象為node使用者, 須為系統管理者, 須先檢測token是否有效, 再進行數據變更
|
|
834
918
|
|
|
835
919
|
//token
|
|
836
920
|
let token = get(req, 'query.token', '')
|
|
837
921
|
|
|
838
|
-
//
|
|
839
|
-
let user = await
|
|
922
|
+
//getAndVerifyAppTokenUser
|
|
923
|
+
let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceRuleGroups')
|
|
840
924
|
|
|
841
925
|
//check
|
|
842
926
|
if (!iseobj(user)) {
|
|
843
927
|
console.log('token', token)
|
|
844
928
|
console.log('[API]syncAndReplaceRuleGroups/check user: invalid user')
|
|
929
|
+
console.log(`token does not have permission`)
|
|
845
930
|
return Promise.reject(`token does not have permission`)
|
|
846
931
|
}
|
|
847
932
|
|
|
@@ -918,7 +1003,7 @@ export default WWebPerm
|
|
|
918
1003
|
<br class="clear">
|
|
919
1004
|
|
|
920
1005
|
<footer>
|
|
921
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
1006
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Fri Nov 03 2023 12:07:17 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
922
1007
|
</footer>
|
|
923
1008
|
|
|
924
1009
|
<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
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Fri Nov 03 2023 12:07:17 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,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w-web-perm",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"main": "dist/w-web-perm.umd.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@mdi/js": "^7.2.96",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"w-data-collector": "^1.0.19",
|
|
13
13
|
"w-serv-hapi": "^1.0.11",
|
|
14
14
|
"w-serv-orm": "^1.0.7",
|
|
15
|
-
"w-ui-loginout": "^1.0.
|
|
15
|
+
"w-ui-loginout": "^1.0.5",
|
|
16
16
|
"wsemi": "^1.7.38"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
package/public/index.html
CHANGED
|
@@ -12,6 +12,13 @@
|
|
|
12
12
|
<!-- fontawesome -->
|
|
13
13
|
<link href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@6.4.2/css/all.min.css" rel="stylesheet">
|
|
14
14
|
|
|
15
|
+
<!-- ___pmwperm___ -->
|
|
16
|
+
<script>
|
|
17
|
+
window.___pmwperm___={
|
|
18
|
+
urlRedirect: '{urlRedirect}',
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
15
22
|
</head>
|
|
16
23
|
<body style="font-family:'Microsoft JhengHei','Avenir','Helvetica', 'Arial', 'sans-serif'; padding:0px; margin:0px;">
|
|
17
24
|
<noscript>
|