w-web-perm 1.0.3 → 1.0.5
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 +9 -4
- package/dist/css/app.c07ac905.css +1 -0
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.08662a52.js +2 -0
- package/dist/js/app-legacy.08662a52.js.map +1 -0
- package/dist/js/app.08662a52.js +2 -0
- package/dist/js/app.08662a52.js.map +1 -0
- package/dist/js/chunk-vendors-legacy.01754e13.js +13 -0
- package/dist/js/chunk-vendors-legacy.01754e13.js.map +1 -0
- package/dist/js/chunk-vendors.01754e13.js +13 -0
- package/dist/js/chunk-vendors.01754e13.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 +41 -5
- package/docs/WWebPerm.mjs.html +346 -23
- package/docs/index.html +1 -1
- package/{g.mDb.mjs → g.backupDb.mjs} +1 -1
- package/g.initialData.mjs +111 -0
- package/{g.mInitialTestData.mjs → g.initialTestData.mjs} +1 -1
- package/g.provideRuleGroups.mjs +56 -0
- package/g.provideTargets.mjs +57 -0
- package/g.provideUsers.mjs +45 -0
- package/package.json +4 -9
- package/public/index.html +1 -1
- package/server/WWebPerm.mjs +345 -22
- package/server/provideRuleGroups.mjs +65 -0
- package/server/provideTargets.mjs +59 -0
- package/server/provideUsers.mjs +68 -0
- package/src/App.vue +2 -10
- package/src/components/Common/CheckYes.vue +2 -2
- package/src/components/Common/CheckYesNo.vue +3 -3
- package/src/components/Common/LoadingWinBar.vue +1 -1
- package/src/components/LayoutContent.vue +35 -62
- package/src/components/LayoutContentGroups.vue +64 -61
- package/src/components/LayoutContentTargets.vue +52 -53
- package/src/components/LayoutContentUsers.vue +62 -60
- package/src/components/VeUser.vue +18 -26
- package/src/components/ruleGroup.vue +11 -11
- package/src/main.js +0 -2
- package/src/schema/tables/ruleGroups.mjs +11 -11
- package/src/schema/tables/targets.mjs +6 -9
- package/src/schema/tables/users.mjs +5 -5
- package/src/store/mutations.mjs +324 -69
- package/srv.mjs +9 -10
- package/tableTags-web-perm.json +1 -1
- package/dist/css/app.79b4b59b.css +0 -1
- package/dist/css/chunk-vendors.1c6c57f9.css +0 -5
- package/dist/js/app-legacy.317c7b7b.js +0 -2
- package/dist/js/app-legacy.317c7b7b.js.map +0 -1
- package/dist/js/app.317c7b7b.js +0 -2
- package/dist/js/app.317c7b7b.js.map +0 -1
- package/dist/js/chunk-vendors-legacy.a074d0c0.js +0 -13
- package/dist/js/chunk-vendors-legacy.a074d0c0.js.map +0 -1
- package/dist/js/chunk-vendors.a074d0c0.js +0 -13
- package/dist/js/chunk-vendors.a074d0c0.js.map +0 -1
- package/g.mInitialData.mjs +0 -147
- package/src/plugins/mVuetify.mjs +0 -12
package/docs/WWebPerm.html
CHANGED
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
|
|
65
65
|
|
|
66
66
|
|
|
67
|
-
<h4 class="name" id="WWebPerm"><span class="type-signature"></span>new WWebPerm<span class="signature">(WOrm, url, db, getUserByToken, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h4>
|
|
67
|
+
<h4 class="name" id="WWebPerm"><span class="type-signature"></span>new WWebPerm<span class="signature">(WOrm, url, db, getUserByToken, verifyUser, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h4>
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
|
|
@@ -74,13 +74,13 @@
|
|
|
74
74
|
<dl class="details">
|
|
75
75
|
|
|
76
76
|
<dt class="tag-description">Description:</dt>
|
|
77
|
-
<dd class="tag-description"><ul class="dummy"><li><p
|
|
77
|
+
<dd class="tag-description"><ul class="dummy"><li><p>權限伺服器</p></li></ul></dd>
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
<dt class="tag-source">Source:</dt>
|
|
82
82
|
<dd class="tag-source"><ul class="dummy"><li>
|
|
83
|
-
<a href="WWebPerm.mjs.html">WWebPerm.mjs</a>, <a href="WWebPerm.mjs.html#
|
|
83
|
+
<a href="WWebPerm.mjs.html">WWebPerm.mjs</a>, <a href="WWebPerm.mjs.html#line113">line 113</a>
|
|
84
84
|
</li></ul></dd>
|
|
85
85
|
|
|
86
86
|
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
|
|
128
128
|
<h5 class="h5-examples">Example</h5>
|
|
129
129
|
|
|
130
|
-
<pre class="prettyprint"><code
|
|
130
|
+
<pre class="prettyprint"><code>import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
|
|
131
131
|
bCheckUser: false,
|
|
132
132
|
getUserById: null,
|
|
133
133
|
bExcludeWhenNotAdmin: false,
|
|
134
134
|
serverPort: 11006,
|
|
135
135
|
subfolder: '', //mperm
|
|
136
136
|
webName: {
|
|
137
137
|
'eng': 'Permission Service',
|
|
138
138
|
'cht': '權限管理系統',
|
|
139
139
|
},
|
|
140
140
|
webDescription: {
|
|
141
141
|
'eng': 'A web service package for user permissions and management targets.',
|
|
142
142
|
'cht': 'A web service package for user permissions and management targets.',
|
|
143
143
|
},
|
|
144
144
|
webLogo: 'data:image/svg+xml;base64,...',
|
|
145
145
|
// return {} //測試無法登入
|
|
146
146
|
if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
147
147
|
return {
|
|
148
148
|
id: 'id-for-application',
|
|
149
149
|
name: 'application',
|
|
150
150
|
email: 'admin@example.com',
|
|
151
151
|
isAdmin: 'y',
|
|
152
152
|
}
|
|
153
153
|
}
|
|
154
154
|
if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
155
155
|
return {
|
|
156
156
|
id: 'id-for-admin',
|
|
157
157
|
name: 'tester',
|
|
158
158
|
email: 'admin@example.com',
|
|
159
159
|
isAdmin: 'y',
|
|
160
160
|
}
|
|
161
161
|
}
|
|
162
162
|
console.log('invalid token', token)
|
|
163
163
|
console.log('於生產環境時得加入SSO等驗證token機制')
|
|
164
164
|
return {}
|
|
165
165
|
console.log('於生產環境時得加入驗證user機制')
|
|
166
166
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
167
167
|
console.log(err)
|
|
168
168
|
|
|
169
169
|
|
|
170
170
|
|
|
@@ -303,6 +303,42 @@
|
|
|
303
303
|
|
|
304
304
|
|
|
305
305
|
|
|
306
|
+
<tr>
|
|
307
|
+
|
|
308
|
+
<td class="name"><code>verifyUser</code></td>
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
<td class="type">
|
|
312
|
+
|
|
313
|
+
|
|
314
|
+
<span class="param-type">function</span>
|
|
315
|
+
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
</td>
|
|
320
|
+
|
|
321
|
+
|
|
322
|
+
<td class="attributes">
|
|
323
|
+
|
|
324
|
+
|
|
325
|
+
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
</td>
|
|
329
|
+
|
|
330
|
+
|
|
331
|
+
|
|
332
|
+
<td class="default">
|
|
333
|
+
|
|
334
|
+
</td>
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
<td class="description last"><p>輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false</p></td>
|
|
338
|
+
</tr>
|
|
339
|
+
|
|
340
|
+
|
|
341
|
+
|
|
306
342
|
<tr>
|
|
307
343
|
|
|
308
344
|
<td class="name"><code>opt</code></td>
|
|
@@ -813,7 +849,7 @@
|
|
|
813
849
|
<br class="clear">
|
|
814
850
|
|
|
815
851
|
<footer>
|
|
816
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
852
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Nov 02 2023 10:30:51 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
817
853
|
</footer>
|
|
818
854
|
|
|
819
855
|
<script>prettyPrint();</script>
|
package/docs/WWebPerm.mjs.html
CHANGED
|
@@ -48,13 +48,16 @@
|
|
|
48
48
|
<pre class="prettyprint source linenums"><code>import path from 'path'
|
|
49
49
|
import fs from 'fs'
|
|
50
50
|
import get from 'lodash/get'
|
|
51
|
+
import each from 'lodash/each'
|
|
51
52
|
import keys from 'lodash/keys'
|
|
52
53
|
import iseobj from 'wsemi/src/iseobj.mjs'
|
|
53
54
|
import isestr from 'wsemi/src/isestr.mjs'
|
|
54
55
|
import ispint from 'wsemi/src/ispint.mjs'
|
|
56
|
+
import isearr from 'wsemi/src/isearr.mjs'
|
|
55
57
|
import isfun from 'wsemi/src/isfun.mjs'
|
|
56
58
|
import ispm from 'wsemi/src/ispm.mjs'
|
|
57
59
|
import cint from 'wsemi/src/cint.mjs'
|
|
60
|
+
import j2o from 'wsemi/src/j2o.mjs'
|
|
58
61
|
import strleft from 'wsemi/src/strleft.mjs'
|
|
59
62
|
import strright from 'wsemi/src/strright.mjs'
|
|
60
63
|
import strdelright from 'wsemi/src/strdelright.mjs'
|
|
@@ -68,13 +71,14 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
68
71
|
|
|
69
72
|
|
|
70
73
|
/**
|
|
71
|
-
*
|
|
74
|
+
* 權限伺服器
|
|
72
75
|
*
|
|
73
76
|
* @class
|
|
74
77
|
* @param {Function} WOrm 輸入資料庫ORM函數
|
|
75
78
|
* @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
|
|
76
79
|
* @param {String} db 輸入資料庫名稱字串
|
|
77
80
|
* @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
|
|
81
|
+
* @param {Function} verifyUser 輸入處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
78
82
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
79
83
|
* @param {Integer} [opt.serverPort=11006] 輸入伺服器通訊port,預設11006
|
|
80
84
|
* @param {Boolean} [opt.bCheckUser=false] 輸入是否檢查使用者資訊布林值,預設false
|
|
@@ -87,9 +91,73 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
87
91
|
* @param {String} [opt.mappingBy='email'] 輸入外部系統識別使用者token後所提供之資料物件,與權限系統之使用者資料物件,兩者間查找之對應欄位,可選'id'、'email'、'name',預設'email'
|
|
88
92
|
* @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
|
|
89
93
|
* @example
|
|
90
|
-
|
|
94
|
+
* import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
|
|
95
|
+
* import WWebPerm from './server/WWebPerm.mjs'
|
|
96
|
+
* import getSettings from './g.getSettings.mjs'
|
|
97
|
+
*
|
|
98
|
+
* //st
|
|
99
|
+
* let st = getSettings()
|
|
100
|
+
*
|
|
101
|
+
* let url = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}` //使用Mongodb測試
|
|
102
|
+
* let db = st.dbName
|
|
103
|
+
* let opt = {
|
|
104
|
+
*
|
|
105
|
+
* bCheckUser: false,
|
|
106
|
+
* getUserById: null,
|
|
107
|
+
* bExcludeWhenNotAdmin: false,
|
|
108
|
+
*
|
|
109
|
+
* serverPort: 11006,
|
|
110
|
+
* subfolder: '', //mperm
|
|
111
|
+
*
|
|
112
|
+
* webName: {
|
|
113
|
+
* 'eng': 'Permission Service',
|
|
114
|
+
* 'cht': '權限管理系統',
|
|
115
|
+
* },
|
|
116
|
+
* webDescription: {
|
|
117
|
+
* 'eng': 'A web service package for user permissions and management targets.',
|
|
118
|
+
* 'cht': 'A web service package for user permissions and management targets.',
|
|
119
|
+
* },
|
|
120
|
+
* webLogo: 'data:image/svg+xml;base64,...',
|
|
121
|
+
*
|
|
122
|
+
* }
|
|
123
|
+
*
|
|
124
|
+
* let getUserByToken = async (token) => {
|
|
125
|
+
* // return {} //測試無法登入
|
|
126
|
+
* if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
127
|
+
* return {
|
|
128
|
+
* id: 'id-for-application',
|
|
129
|
+
* name: 'application',
|
|
130
|
+
* email: 'admin@example.com',
|
|
131
|
+
* isAdmin: 'y',
|
|
132
|
+
* }
|
|
133
|
+
* }
|
|
134
|
+
* if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
135
|
+
* return {
|
|
136
|
+
* id: 'id-for-admin',
|
|
137
|
+
* name: 'tester',
|
|
138
|
+
* email: 'admin@example.com',
|
|
139
|
+
* isAdmin: 'y',
|
|
140
|
+
* }
|
|
141
|
+
* }
|
|
142
|
+
* console.log('invalid token', token)
|
|
143
|
+
* console.log('於生產環境時得加入SSO等驗證token機制')
|
|
144
|
+
* return {}
|
|
145
|
+
* }
|
|
146
|
+
*
|
|
147
|
+
* let verifyUser = (user) => {
|
|
148
|
+
* console.log('於生產環境時得加入驗證user機制')
|
|
149
|
+
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
150
|
+
* }
|
|
151
|
+
*
|
|
152
|
+
* //WWebPerm
|
|
153
|
+
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt)
|
|
154
|
+
*
|
|
155
|
+
* instWWebPerm.on('error', (err) => {
|
|
156
|
+
* console.log(err)
|
|
157
|
+
* })
|
|
158
|
+
*
|
|
91
159
|
*/
|
|
92
|
-
function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
160
|
+
function WWebPerm(WOrm, url, db, getUserByToken, verifyUser, opt = {}) {
|
|
93
161
|
let instWServHapiServer = null
|
|
94
162
|
|
|
95
163
|
|
|
@@ -121,6 +189,13 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
121
189
|
}
|
|
122
190
|
|
|
123
191
|
|
|
192
|
+
//check verifyUser
|
|
193
|
+
if (!isfun(verifyUser)) {
|
|
194
|
+
console.log('invalid verifyUser', verifyUser)
|
|
195
|
+
throw new Error('invalid verifyUser')
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
124
199
|
//serverPort
|
|
125
200
|
let serverPort = get(opt, 'serverPort')
|
|
126
201
|
if (!ispint(serverPort)) {
|
|
@@ -170,6 +245,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
170
245
|
if (mappingBy !== 'id' && mappingBy !== 'email' && mappingBy !== 'name') {
|
|
171
246
|
mappingBy = 'email'
|
|
172
247
|
}
|
|
248
|
+
// console.log('mappingBy', mappingBy)
|
|
173
249
|
|
|
174
250
|
|
|
175
251
|
//WServOrm
|
|
@@ -245,31 +321,32 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
245
321
|
|
|
246
322
|
//check
|
|
247
323
|
if (!iseobj(userSelf)) {
|
|
248
|
-
console.log(
|
|
249
|
-
return
|
|
324
|
+
console.log(`can not find the user from token`, token)
|
|
325
|
+
return Promise.reject(`can not find the user from token`)
|
|
250
326
|
}
|
|
251
327
|
|
|
252
328
|
//check userSelf
|
|
253
329
|
if (true) {
|
|
254
330
|
let id = get(userSelf, 'id', '')
|
|
255
331
|
if (!isestr(id)) {
|
|
256
|
-
console.log('
|
|
257
|
-
return
|
|
332
|
+
console.log('userSelf', userSelf)
|
|
333
|
+
return Promise.reject(`can not get the userId`)
|
|
258
334
|
}
|
|
259
335
|
let email = get(userSelf, 'email', '')
|
|
260
336
|
if (!isestr(email)) {
|
|
261
|
-
console.log('
|
|
262
|
-
return
|
|
337
|
+
console.log('userSelf', userSelf)
|
|
338
|
+
return Promise.reject(`can not get the email of user`)
|
|
263
339
|
}
|
|
264
340
|
let name = get(userSelf, 'name', '')
|
|
265
341
|
if (!isestr(name)) {
|
|
266
|
-
console.log('
|
|
267
|
-
return
|
|
342
|
+
console.log('userSelf', userSelf)
|
|
343
|
+
return Promise.reject(`can not get userName`)
|
|
268
344
|
}
|
|
269
345
|
let isAdmin = get(userSelf, 'isAdmin', '')
|
|
270
346
|
if (isAdmin !== 'y' && isAdmin !== 'n') {
|
|
271
|
-
console.log('userSelf
|
|
272
|
-
|
|
347
|
+
console.log('userSelf', userSelf)
|
|
348
|
+
console.log('userSelf.isAdmin is not y or n', userSelf.isAdmin)
|
|
349
|
+
return Promise.reject(`can not get the role of user`)
|
|
273
350
|
}
|
|
274
351
|
}
|
|
275
352
|
|
|
@@ -279,8 +356,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
279
356
|
|
|
280
357
|
//check
|
|
281
358
|
if (!isestr(vSelf)) {
|
|
282
|
-
console.log('
|
|
283
|
-
|
|
359
|
+
console.log('userSelf', userSelf)
|
|
360
|
+
console.log('mappingBy', mappingBy)
|
|
361
|
+
return Promise.reject(`can not get the prop of user by mappingBy`)
|
|
284
362
|
}
|
|
285
363
|
|
|
286
364
|
//userFind
|
|
@@ -288,6 +366,13 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
288
366
|
userFind = get(userFind, 0, null)
|
|
289
367
|
// console.log('userFind', userFind)
|
|
290
368
|
|
|
369
|
+
//check
|
|
370
|
+
if (!iseobj(userFind)) {
|
|
371
|
+
console.log('userSelf', userSelf)
|
|
372
|
+
console.log('mappingBy', mappingBy)
|
|
373
|
+
return Promise.reject(`can not get the user from perm`)
|
|
374
|
+
}
|
|
375
|
+
|
|
291
376
|
//複寫isAdmin
|
|
292
377
|
let isAdminSrc = get(userSelf, 'isAdmin', '')
|
|
293
378
|
let isAdminSelf = get(userFind, 'isAdmin', '')
|
|
@@ -296,10 +381,112 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
296
381
|
}
|
|
297
382
|
// console.log('userFind(isAdmin)', userFind)
|
|
298
383
|
|
|
384
|
+
//verifyUser
|
|
385
|
+
let b = verifyUser(userFind)
|
|
386
|
+
if (ispm(b)) {
|
|
387
|
+
b = await b
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
//check
|
|
391
|
+
if (!b) {
|
|
392
|
+
console.log('userSelf', userSelf)
|
|
393
|
+
console.log('verifyUser/userFind', userFind)
|
|
394
|
+
return Promise.reject(`user does not have permission`)
|
|
395
|
+
}
|
|
396
|
+
|
|
299
397
|
return userFind
|
|
300
398
|
}
|
|
301
399
|
|
|
302
400
|
|
|
401
|
+
//parsePayload
|
|
402
|
+
let parsePayload = async (req, key) => {
|
|
403
|
+
let inp = get(req, 'payload')
|
|
404
|
+
|
|
405
|
+
//to obj
|
|
406
|
+
if (isestr(inp)) {
|
|
407
|
+
inp = j2o(inp)
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
//check
|
|
411
|
+
if (!iseobj(inp)) {
|
|
412
|
+
console.log('inp', inp)
|
|
413
|
+
return Promise.reject(`invalid inp from req`)
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
//from
|
|
417
|
+
let from = get(inp, 'from', '')
|
|
418
|
+
|
|
419
|
+
//check
|
|
420
|
+
if (!isestr(from)) {
|
|
421
|
+
console.log('inp', inp)
|
|
422
|
+
console.log('from', from)
|
|
423
|
+
return Promise.reject(`invalid from from inp`)
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
|
|
427
|
+
//vs
|
|
428
|
+
let vs = get(inp, key, [])
|
|
429
|
+
//users
|
|
430
|
+
//targets
|
|
431
|
+
//ruleGroups
|
|
432
|
+
|
|
433
|
+
//check
|
|
434
|
+
if (!isearr(vs)) {
|
|
435
|
+
console.log('inp', inp)
|
|
436
|
+
console.log(key, vs)
|
|
437
|
+
return Promise.reject(`invalid ${key} from inp`)
|
|
438
|
+
}
|
|
439
|
+
|
|
440
|
+
//resave
|
|
441
|
+
inp = {
|
|
442
|
+
from,
|
|
443
|
+
[key]: vs,
|
|
444
|
+
}
|
|
445
|
+
|
|
446
|
+
return inp
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
|
|
450
|
+
//syncAndReplaceRows
|
|
451
|
+
let syncAndReplaceRows = async (params, key) => {
|
|
452
|
+
|
|
453
|
+
//from
|
|
454
|
+
let from = get(params, 'from', '')
|
|
455
|
+
// console.log('from', from)
|
|
456
|
+
|
|
457
|
+
//check
|
|
458
|
+
if (!isestr(from)) {
|
|
459
|
+
console.log('params', params)
|
|
460
|
+
console.log('from', from)
|
|
461
|
+
return Promise.reject(`invalid from`)
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
//vs
|
|
465
|
+
let vs = get(params, key, [])
|
|
466
|
+
// console.log(key, vs)
|
|
467
|
+
|
|
468
|
+
//check
|
|
469
|
+
if (!isearr(vs)) {
|
|
470
|
+
console.log('params', params)
|
|
471
|
+
console.log(key, vs)
|
|
472
|
+
return Promise.reject(`invalid ${key}`)
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
//save from
|
|
476
|
+
each(vs, (v, k) => {
|
|
477
|
+
vs[k].from = from
|
|
478
|
+
})
|
|
479
|
+
|
|
480
|
+
//delAll from
|
|
481
|
+
await woItems[key].delAll({ from })
|
|
482
|
+
|
|
483
|
+
//insert
|
|
484
|
+
let r = await woItems[key].insert(vs)
|
|
485
|
+
|
|
486
|
+
return r
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
|
|
303
490
|
//getGenUserByKV
|
|
304
491
|
let getGenUserByKV = async(keyUser, valueUser) => {
|
|
305
492
|
|
|
@@ -429,10 +616,17 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
429
616
|
// console.log('userSelf', userSelf)
|
|
430
617
|
|
|
431
618
|
//check
|
|
432
|
-
if (
|
|
433
|
-
|
|
619
|
+
if (!iseobj(userSelf)) {
|
|
620
|
+
console.log('token', token)
|
|
621
|
+
console.log('[API]getUserByToken/check userSelf: invalid userSelf')
|
|
622
|
+
return Promise.reject(`token does not have permission`)
|
|
434
623
|
}
|
|
435
624
|
|
|
625
|
+
// //check
|
|
626
|
+
// if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
|
|
627
|
+
// return Promise.reject(`user does not have permission`)
|
|
628
|
+
// }
|
|
629
|
+
|
|
436
630
|
return userSelf
|
|
437
631
|
}
|
|
438
632
|
|
|
@@ -462,7 +656,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
462
656
|
|
|
463
657
|
//check
|
|
464
658
|
if (!iseobj(userLogin)) {
|
|
465
|
-
|
|
659
|
+
console.log('token', token)
|
|
660
|
+
console.log('[API]getPerm/check userLogin: invalid userLogin')
|
|
661
|
+
return Promise.reject(`token does not have permission`)
|
|
466
662
|
}
|
|
467
663
|
|
|
468
664
|
//parseUserId
|
|
@@ -471,7 +667,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
471
667
|
|
|
472
668
|
//check
|
|
473
669
|
if (!isestr(userId)) {
|
|
474
|
-
|
|
670
|
+
console.log('userLogin', userLogin)
|
|
671
|
+
console.log('[API]getPerm/check userId: invalid userId')
|
|
672
|
+
return Promise.reject(`token does not have permission`)
|
|
475
673
|
}
|
|
476
674
|
|
|
477
675
|
//getGenUserAndRulesByUserId
|
|
@@ -480,7 +678,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
480
678
|
|
|
481
679
|
//check
|
|
482
680
|
if (!iseobj(r)) {
|
|
483
|
-
|
|
681
|
+
console.log('userLogin', userLogin)
|
|
682
|
+
console.log('[API]getPerm/getGenUserAndRulesByUserId: user does not have permrules')
|
|
683
|
+
return Promise.reject(`token does not have permission`)
|
|
484
684
|
}
|
|
485
685
|
|
|
486
686
|
return r
|
|
@@ -511,10 +711,17 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
511
711
|
// console.log('userSelf', userSelf)
|
|
512
712
|
|
|
513
713
|
//check
|
|
514
|
-
if (
|
|
515
|
-
|
|
714
|
+
if (!iseobj(userSelf)) {
|
|
715
|
+
console.log('token', token)
|
|
716
|
+
console.log('[API]getPermById/check userSelf: invalid userSelf')
|
|
717
|
+
return Promise.reject(`token does not have permission`)
|
|
516
718
|
}
|
|
517
719
|
|
|
720
|
+
// //check
|
|
721
|
+
// if (get(userSelf, 'isAdmin') !== 'y') { //權限系統須系統管理員才能使用
|
|
722
|
+
// return Promise.reject(`user does not have permission`)
|
|
723
|
+
// }
|
|
724
|
+
|
|
518
725
|
//userId
|
|
519
726
|
let userId = get(req, 'query.userId', '')
|
|
520
727
|
// console.log('userId', userId)
|
|
@@ -525,6 +732,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
525
732
|
|
|
526
733
|
//check
|
|
527
734
|
if (!iseobj(r)) {
|
|
735
|
+
console.log('userSelf', userSelf)
|
|
736
|
+
console.log('[API]getPermById/getGenUserAndRulesByUserId: user does not have permrules')
|
|
528
737
|
return Promise.reject(`user does not have permrules`)
|
|
529
738
|
}
|
|
530
739
|
|
|
@@ -535,6 +744,120 @@ function WWebPerm(WOrm, url, db, getUserByToken, opt = {}) {
|
|
|
535
744
|
let r = await pm2resolve(core)() //w-ui-loginout接收已預設格式用pm2resolve轉過, 須另提取state進行判斷
|
|
536
745
|
// console.log('getUserByToken', r)
|
|
537
746
|
|
|
747
|
+
return r
|
|
748
|
+
},
|
|
749
|
+
},
|
|
750
|
+
{
|
|
751
|
+
method: 'POST',
|
|
752
|
+
path: '/syncAndReplaceUsers',
|
|
753
|
+
handler: async function (req, res) {
|
|
754
|
+
// console.log('syncAndReplaceUsers', req)
|
|
755
|
+
// console.log('payload', req.payload)
|
|
756
|
+
|
|
757
|
+
async function core() {
|
|
758
|
+
|
|
759
|
+
//token
|
|
760
|
+
let token = get(req, 'query.token', '')
|
|
761
|
+
|
|
762
|
+
//getTokenUserForSelf
|
|
763
|
+
let user = await getTokenUserForSelf(token)
|
|
764
|
+
|
|
765
|
+
//check
|
|
766
|
+
if (!iseobj(user)) {
|
|
767
|
+
console.log('token', token)
|
|
768
|
+
console.log('[API]syncAndReplaceUsers/check user: invalid user')
|
|
769
|
+
return Promise.reject(`token does not have permission`)
|
|
770
|
+
}
|
|
771
|
+
|
|
772
|
+
//parsePayload
|
|
773
|
+
let inp = await parsePayload(req, 'users')
|
|
774
|
+
|
|
775
|
+
//syncAndReplaceRows
|
|
776
|
+
let r = await syncAndReplaceRows(inp, 'users')
|
|
777
|
+
|
|
778
|
+
return r
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
//pm2resolve core
|
|
782
|
+
let r = await pm2resolve(core)()
|
|
783
|
+
// console.log('verifyIdentity', r)
|
|
784
|
+
|
|
785
|
+
return r
|
|
786
|
+
},
|
|
787
|
+
},
|
|
788
|
+
{
|
|
789
|
+
method: 'POST',
|
|
790
|
+
path: '/syncAndReplaceTargets',
|
|
791
|
+
handler: async function (req, res) {
|
|
792
|
+
// console.log('syncAndReplaceTargets', req)
|
|
793
|
+
// console.log('payload', req.payload)
|
|
794
|
+
|
|
795
|
+
async function core() {
|
|
796
|
+
|
|
797
|
+
//token
|
|
798
|
+
let token = get(req, 'query.token', '')
|
|
799
|
+
|
|
800
|
+
//getTokenUserForSelf
|
|
801
|
+
let user = await getTokenUserForSelf(token)
|
|
802
|
+
|
|
803
|
+
//check
|
|
804
|
+
if (!iseobj(user)) {
|
|
805
|
+
console.log('token', token)
|
|
806
|
+
console.log('[API]syncAndReplaceTargets/check user: invalid user')
|
|
807
|
+
return Promise.reject(`token does not have permission`)
|
|
808
|
+
}
|
|
809
|
+
|
|
810
|
+
//parsePayload
|
|
811
|
+
let inp = await parsePayload(req, 'targets')
|
|
812
|
+
|
|
813
|
+
//syncAndReplaceRows
|
|
814
|
+
let r = await syncAndReplaceRows(inp, 'targets')
|
|
815
|
+
|
|
816
|
+
return r
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
//pm2resolve core
|
|
820
|
+
let r = await pm2resolve(core)()
|
|
821
|
+
// console.log('verifyIdentity', r)
|
|
822
|
+
|
|
823
|
+
return r
|
|
824
|
+
},
|
|
825
|
+
},
|
|
826
|
+
{
|
|
827
|
+
method: 'POST',
|
|
828
|
+
path: '/syncAndReplaceRuleGroups',
|
|
829
|
+
handler: async function (req, res) {
|
|
830
|
+
// console.log('syncAndReplaceRuleGroups', req)
|
|
831
|
+
// console.log('payload', req.payload)
|
|
832
|
+
|
|
833
|
+
async function core() {
|
|
834
|
+
|
|
835
|
+
//token
|
|
836
|
+
let token = get(req, 'query.token', '')
|
|
837
|
+
|
|
838
|
+
//getTokenUserForSelf
|
|
839
|
+
let user = await getTokenUserForSelf(token)
|
|
840
|
+
|
|
841
|
+
//check
|
|
842
|
+
if (!iseobj(user)) {
|
|
843
|
+
console.log('token', token)
|
|
844
|
+
console.log('[API]syncAndReplaceRuleGroups/check user: invalid user')
|
|
845
|
+
return Promise.reject(`token does not have permission`)
|
|
846
|
+
}
|
|
847
|
+
|
|
848
|
+
//parsePayload
|
|
849
|
+
let inp = await parsePayload(req, 'ruleGroups')
|
|
850
|
+
|
|
851
|
+
//syncAndReplaceRows
|
|
852
|
+
let r = await syncAndReplaceRows(inp, 'ruleGroups')
|
|
853
|
+
|
|
854
|
+
return r
|
|
855
|
+
}
|
|
856
|
+
|
|
857
|
+
//pm2resolve core
|
|
858
|
+
let r = await pm2resolve(core)()
|
|
859
|
+
// console.log('verifyIdentity', r)
|
|
860
|
+
|
|
538
861
|
return r
|
|
539
862
|
},
|
|
540
863
|
},
|
|
@@ -595,7 +918,7 @@ export default WWebPerm
|
|
|
595
918
|
<br class="clear">
|
|
596
919
|
|
|
597
920
|
<footer>
|
|
598
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on
|
|
921
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.2</a> on Thu Nov 02 2023 10:30:51 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
599
922
|
</footer>
|
|
600
923
|
|
|
601
924
|
<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 Thu Nov 02 2023 10:30:51 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
75
75
|
</footer>
|
|
76
76
|
|
|
77
77
|
<script>prettyPrint();</script>
|