w-web-perm 1.0.34 → 1.0.35
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 +2 -2
- package/db/wperm/grups/data.mdb +0 -0
- package/db/wperm/grups/lock.mdb +0 -0
- package/db/wperm/pemis/data.mdb +0 -0
- package/db/wperm/pemis/lock.mdb +0 -0
- package/db/wperm/targets/data.mdb +0 -0
- package/db/wperm/targets/lock.mdb +0 -0
- package/db/wperm/users/data.mdb +0 -0
- package/db/wperm/users/lock.mdb +0 -0
- package/dist/index.tmp +1 -1
- package/dist/js/app-legacy.7b8702cb.js +2 -0
- package/dist/js/app-legacy.7b8702cb.js.map +1 -0
- package/dist/js/app.7b8702cb.js +2 -0
- package/dist/js/app.7b8702cb.js.map +1 -0
- package/dist/js/chunk-vendors-legacy.f49fb888.js +15 -0
- package/dist/js/chunk-vendors-legacy.f49fb888.js.map +1 -0
- package/dist/js/chunk-vendors.f49fb888.js +15 -0
- package/dist/js/chunk-vendors.f49fb888.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 +4 -4
- package/docs/WWebPerm.mjs.html +39 -34
- package/docs/index.html +1 -1
- package/g.getSettings.mjs +6 -4
- package/g.mOrm.mjs +2 -2
- package/package.json +3 -3
- package/server/WWebPerm.mjs +38 -33
- package/srv.mjs +5 -5
- package/tableTags.json +1 -1
- package/dist/js/app-legacy.4bd35604.js +0 -2
- package/dist/js/app-legacy.4bd35604.js.map +0 -1
- package/dist/js/app.4bd35604.js +0 -2
- package/dist/js/app.4bd35604.js.map +0 -1
- package/dist/js/chunk-vendors-legacy.cfa263df.js +0 -13
- package/dist/js/chunk-vendors-legacy.cfa263df.js.map +0 -1
- package/dist/js/chunk-vendors.cfa263df.js +0 -13
- package/dist/js/chunk-vendors.cfa263df.js.map +0 -1
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,
|
|
67
|
+
<h4 class="name" id="WWebPerm"><span class="type-signature"></span>new WWebPerm<span class="signature">(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Object}</span></h4>
|
|
68
68
|
|
|
69
69
|
|
|
70
70
|
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
|
|
128
128
|
<h5 class="h5-examples">Example</h5>
|
|
129
129
|
|
|
130
|
-
<pre class="prettyprint"><code>import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
|
|
131
130
|
useCheckUser: false,
|
|
132
131
|
getUserById: null,
|
|
133
132
|
useExcludeWhenNotAdmin: false,
|
|
134
133
|
serverPort: 11006,
|
|
135
134
|
subfolder: '', //mperm
|
|
136
135
|
urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/
|
|
137
136
|
webName: {
|
|
138
137
|
'eng': 'Permission Service',
|
|
139
138
|
'cht': '權限管理系統',
|
|
140
139
|
},
|
|
141
140
|
webDescription: {
|
|
142
141
|
'eng': 'A web service package for user permissions and management targets.',
|
|
143
142
|
'cht': 'A web service package for user permissions and management targets.',
|
|
144
143
|
},
|
|
145
144
|
webLogo: 'data:image/svg+xml;base64,...',
|
|
146
145
|
// return {} //測試無法登入
|
|
147
146
|
if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
148
147
|
return {
|
|
149
148
|
id: 'id-for-application',
|
|
150
149
|
name: 'application',
|
|
151
150
|
email: 'application@example.com',
|
|
152
151
|
isAdmin: 'y',
|
|
153
152
|
}
|
|
154
153
|
}
|
|
155
154
|
if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
156
155
|
return {
|
|
157
156
|
id: 'id-for-admin',
|
|
158
157
|
name: 'tester',
|
|
159
158
|
email: 'admin@example.com', //mappingBy為email, 開發階段時會使用email找到所建置之使用者資料
|
|
160
159
|
isAdmin: 'y',
|
|
161
160
|
}
|
|
162
161
|
}
|
|
163
162
|
console.log('invalid token', token)
|
|
164
163
|
console.log('於生產環境時得加入SSO等驗證token機制')
|
|
165
164
|
return {}
|
|
166
165
|
console.log('verifyBrowserUser/user', user)
|
|
167
166
|
// return false //測試無法登入
|
|
168
167
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
169
168
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
170
169
|
console.log('verifyAppUser/user', user)
|
|
171
170
|
// return false //測試無法登入
|
|
172
171
|
console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
173
172
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
174
173
|
console.log(err)
|
|
174
|
+
<pre class="prettyprint"><code>import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
175
175
|
useCheckUser: false,
|
|
176
176
|
getUserById: null,
|
|
177
177
|
useExcludeWhenNotAdmin: false,
|
|
178
178
|
serverPort: 11006,
|
|
179
179
|
subfolder: '', //mperm
|
|
180
180
|
urlRedirect: 'https://www.google.com/', //本機測試時得先編譯, 再瀏覽: http://localhost:11006/
|
|
181
181
|
webName: {
|
|
182
182
|
'eng': 'Permission Service',
|
|
183
183
|
'cht': '權限管理系統',
|
|
184
184
|
},
|
|
185
185
|
webDescription: {
|
|
186
186
|
'eng': 'A web service package for user permissions and management targets.',
|
|
187
187
|
'cht': 'A web service package for user permissions and management targets.',
|
|
188
188
|
},
|
|
189
189
|
webLogo: 'data:image/svg+xml;base64,...',
|
|
190
190
|
// return {} //測試無法登入
|
|
191
191
|
if (token === '{token-for-application}') { //提供外部應用系統作為存取使用者
|
|
192
192
|
return {
|
|
193
193
|
id: 'id-for-application',
|
|
194
194
|
name: 'application',
|
|
195
195
|
email: 'application@example.com',
|
|
196
196
|
isAdmin: 'y',
|
|
197
197
|
}
|
|
198
198
|
}
|
|
199
199
|
if (token === 'sys') { //開發階段w-ui-loginout自動給予browser使用者(且位於localhost)的token為sys
|
|
200
200
|
return {
|
|
201
201
|
id: 'id-for-admin',
|
|
202
202
|
name: 'tester',
|
|
203
203
|
email: 'admin@example.com', //mappingBy為email, 開發階段時會使用email找到所建置之使用者資料
|
|
204
204
|
isAdmin: 'y',
|
|
205
205
|
}
|
|
206
206
|
}
|
|
207
207
|
console.log('invalid token', token)
|
|
208
208
|
console.log('於生產環境時得加入SSO等驗證token機制')
|
|
209
209
|
return {}
|
|
210
210
|
console.log('verifyClientUser/user', user)
|
|
211
211
|
// return false //測試無法登入
|
|
212
212
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
213
213
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
214
214
|
console.log('verifyAppUser/user', user)
|
|
215
215
|
// return false //測試無法登入
|
|
216
216
|
console.log('於生產環境時得加入限制應用程式使用者身份機制')
|
|
217
217
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
218
218
|
console.log(err)
|
|
219
219
|
|
|
220
220
|
|
|
221
221
|
|
|
@@ -305,7 +305,7 @@
|
|
|
305
305
|
|
|
306
306
|
<tr>
|
|
307
307
|
|
|
308
|
-
<td class="name"><code>
|
|
308
|
+
<td class="name"><code>verifyClientUser</code></td>
|
|
309
309
|
|
|
310
310
|
|
|
311
311
|
<td class="type">
|
|
@@ -925,7 +925,7 @@
|
|
|
925
925
|
<br class="clear">
|
|
926
926
|
|
|
927
927
|
<footer>
|
|
928
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.
|
|
928
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Sat Jun 07 2025 20:42:27 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
929
929
|
</footer>
|
|
930
930
|
|
|
931
931
|
<script>prettyPrint();</script>
|
package/docs/WWebPerm.mjs.html
CHANGED
|
@@ -86,7 +86,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
86
86
|
* @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
|
|
87
87
|
* @param {String} db 輸入資料庫名稱字串
|
|
88
88
|
* @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
|
|
89
|
-
* @param {Function}
|
|
89
|
+
* @param {Function} verifyClientUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
90
90
|
* @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
91
91
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
92
92
|
* @param {Integer} [opt.serverPort=11006] 輸入伺服器通訊port,預設11006
|
|
@@ -102,7 +102,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
102
102
|
* @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
|
|
103
103
|
* @example
|
|
104
104
|
*
|
|
105
|
-
* import WOrm from 'w-orm-
|
|
105
|
+
* import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
106
106
|
* import WWebPerm from './server/WWebPerm.mjs'
|
|
107
107
|
* import getSettings from './g.getSettings.mjs'
|
|
108
108
|
*
|
|
@@ -110,7 +110,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
110
110
|
* //st
|
|
111
111
|
* let st = getSettings()
|
|
112
112
|
*
|
|
113
|
-
* let url =
|
|
113
|
+
* let url = st.dbUrl
|
|
114
114
|
* let db = st.dbName
|
|
115
115
|
* let opt = {
|
|
116
116
|
*
|
|
@@ -157,8 +157,8 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
157
157
|
* return {}
|
|
158
158
|
* }
|
|
159
159
|
*
|
|
160
|
-
* let
|
|
161
|
-
* console.log('
|
|
160
|
+
* let verifyClientUser = (user, caller) => {
|
|
161
|
+
* console.log('verifyClientUser/user', user)
|
|
162
162
|
* // return false //測試無法登入
|
|
163
163
|
* console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
164
164
|
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
@@ -172,14 +172,14 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
172
172
|
* }
|
|
173
173
|
*
|
|
174
174
|
* //WWebPerm
|
|
175
|
-
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken,
|
|
175
|
+
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt)
|
|
176
176
|
*
|
|
177
177
|
* instWWebPerm.on('error', (err) => {
|
|
178
178
|
* console.log(err)
|
|
179
179
|
* })
|
|
180
180
|
*
|
|
181
181
|
*/
|
|
182
|
-
function WWebPerm(WOrm, url, db, getUserByToken,
|
|
182
|
+
function WWebPerm(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt = {}) {
|
|
183
183
|
let instWServHapiServer = null
|
|
184
184
|
|
|
185
185
|
|
|
@@ -211,10 +211,10 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
211
211
|
}
|
|
212
212
|
|
|
213
213
|
|
|
214
|
-
//check
|
|
215
|
-
if (!isfun(
|
|
216
|
-
console.log('invalid
|
|
217
|
-
throw new Error('invalid
|
|
214
|
+
//check verifyClientUser
|
|
215
|
+
if (!isfun(verifyClientUser)) {
|
|
216
|
+
console.log('invalid verifyClientUser', verifyClientUser)
|
|
217
|
+
throw new Error('invalid verifyClientUser')
|
|
218
218
|
}
|
|
219
219
|
|
|
220
220
|
|
|
@@ -610,14 +610,15 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
610
610
|
}
|
|
611
611
|
|
|
612
612
|
|
|
613
|
-
//
|
|
614
|
-
let
|
|
613
|
+
//getAndVerifyClientUser
|
|
614
|
+
let getAndVerifyClientUser = async (token, caller = '') => {
|
|
615
|
+
//基於token查找client使用者, 會基於外部getUserByToken以及perm內部users進行查找並比對
|
|
615
616
|
|
|
616
617
|
//getTokenUser
|
|
617
618
|
let userSelf = await getTokenUser(token)
|
|
618
619
|
|
|
619
|
-
//
|
|
620
|
-
let b =
|
|
620
|
+
//verifyClientUser
|
|
621
|
+
let b = verifyClientUser(userSelf, caller)
|
|
621
622
|
if (ispm(b)) {
|
|
622
623
|
b = await b
|
|
623
624
|
}
|
|
@@ -633,9 +634,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
633
634
|
}
|
|
634
635
|
|
|
635
636
|
|
|
636
|
-
//
|
|
637
|
-
let
|
|
638
|
-
//基於token
|
|
637
|
+
//getAndVerifyAppUser
|
|
638
|
+
let getAndVerifyAppUser = async (token, caller = '') => {
|
|
639
|
+
//基於token查找app使用者, 會基於外部getUserByToken進行查找, 故只要getUserByToken提供使用者即可, 可支援getUserByToken給予針對應用程式所產生之虛擬使用者
|
|
639
640
|
|
|
640
641
|
//userSelf
|
|
641
642
|
let userSelf = null
|
|
@@ -915,8 +916,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
915
916
|
let token = get(req, 'query.token', '')
|
|
916
917
|
// console.log('token', token)
|
|
917
918
|
|
|
918
|
-
//
|
|
919
|
-
let userSelf = await
|
|
919
|
+
//getAndVerifyClientUser
|
|
920
|
+
let userSelf = await getAndVerifyClientUser(token, 'getUserByToken')
|
|
920
921
|
// console.log('userSelf', userSelf)
|
|
921
922
|
|
|
922
923
|
//check
|
|
@@ -944,14 +945,14 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
944
945
|
// console.log('getPerm', req)
|
|
945
946
|
|
|
946
947
|
async function core() {
|
|
947
|
-
//提供對象為node與browser使用者, node
|
|
948
|
+
//提供對象為node與browser使用者, 提供對象有node是因為幫忙轉發其他系統browser使用者驗證需求, 皆須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
|
|
948
949
|
|
|
949
950
|
//parseToken
|
|
950
951
|
let token = parseToken(req)
|
|
951
952
|
// console.log('token', token)
|
|
952
953
|
|
|
953
|
-
//
|
|
954
|
-
let userLogin = await
|
|
954
|
+
//getAndVerifyClientUser
|
|
955
|
+
let userLogin = await getAndVerifyClientUser(token, 'getPerm')
|
|
955
956
|
// console.log('userLogin', userLogin)
|
|
956
957
|
|
|
957
958
|
//check
|
|
@@ -1009,8 +1010,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1009
1010
|
let token = get(req, 'query.token', '')
|
|
1010
1011
|
// console.log('token', token)
|
|
1011
1012
|
|
|
1012
|
-
//
|
|
1013
|
-
let userSelf = await
|
|
1013
|
+
//getAndVerifyAppUser
|
|
1014
|
+
let userSelf = await getAndVerifyAppUser(token, 'getPermById')
|
|
1014
1015
|
// console.log('userSelf', userSelf)
|
|
1015
1016
|
|
|
1016
1017
|
//check
|
|
@@ -1060,8 +1061,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1060
1061
|
//token
|
|
1061
1062
|
let token = get(req, 'query.token', '')
|
|
1062
1063
|
|
|
1063
|
-
//
|
|
1064
|
-
let user = await
|
|
1064
|
+
//getAndVerifyAppUser
|
|
1065
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceTargets')
|
|
1065
1066
|
|
|
1066
1067
|
//check
|
|
1067
1068
|
if (!iseobj(user)) {
|
|
@@ -1103,8 +1104,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1103
1104
|
//token
|
|
1104
1105
|
let token = get(req, 'query.token', '')
|
|
1105
1106
|
|
|
1106
|
-
//
|
|
1107
|
-
let user = await
|
|
1107
|
+
//getAndVerifyAppUser
|
|
1108
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplacePemis')
|
|
1108
1109
|
|
|
1109
1110
|
//check
|
|
1110
1111
|
if (!iseobj(user)) {
|
|
@@ -1146,8 +1147,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1146
1147
|
//token
|
|
1147
1148
|
let token = get(req, 'query.token', '')
|
|
1148
1149
|
|
|
1149
|
-
//
|
|
1150
|
-
let user = await
|
|
1150
|
+
//getAndVerifyAppUser
|
|
1151
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceGrups')
|
|
1151
1152
|
|
|
1152
1153
|
//check
|
|
1153
1154
|
if (!iseobj(user)) {
|
|
@@ -1189,8 +1190,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1189
1190
|
//token
|
|
1190
1191
|
let token = get(req, 'query.token', '')
|
|
1191
1192
|
|
|
1192
|
-
//
|
|
1193
|
-
let user = await
|
|
1193
|
+
//getAndVerifyAppUser
|
|
1194
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceUsers')
|
|
1194
1195
|
|
|
1195
1196
|
//check
|
|
1196
1197
|
if (!iseobj(user)) {
|
|
@@ -1235,6 +1236,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1235
1236
|
port: opt.serverPort,
|
|
1236
1237
|
pathStaticFiles,
|
|
1237
1238
|
apis,
|
|
1239
|
+
verifyConn: () => {
|
|
1240
|
+
return true
|
|
1241
|
+
},
|
|
1238
1242
|
getUserIdByToken: async (token) => { //可使用async或sync函數
|
|
1239
1243
|
// console.log('getUserIdByToken', token)
|
|
1240
1244
|
let user = await getUserByToken(token)
|
|
@@ -1246,6 +1250,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1246
1250
|
}
|
|
1247
1251
|
return userId
|
|
1248
1252
|
},
|
|
1253
|
+
corsOrigins: ['*'],
|
|
1249
1254
|
useDbOrm: true,
|
|
1250
1255
|
kpOrm: woItems,
|
|
1251
1256
|
operOrm: procOrm, //procOrm的輸入為: userId, tableName, methodName, input
|
|
@@ -1289,7 +1294,7 @@ export default WWebPerm
|
|
|
1289
1294
|
<br class="clear">
|
|
1290
1295
|
|
|
1291
1296
|
<footer>
|
|
1292
|
-
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.
|
|
1297
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Sat Jun 07 2025 20:42:27 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
|
|
1293
1298
|
</footer>
|
|
1294
1299
|
|
|
1295
1300
|
<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.
|
|
74
|
+
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on Sat Jun 07 2025 20:42:27 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/g.getSettings.mjs
CHANGED
|
@@ -5,11 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
function getSettings() {
|
|
7
7
|
return {
|
|
8
|
-
'dbUsername': 'username',
|
|
9
|
-
'dbPassword': 'password',
|
|
8
|
+
// 'dbUsername': 'username',
|
|
9
|
+
// 'dbPassword': 'password',
|
|
10
|
+
// 'dbName': 'wperm',
|
|
11
|
+
// 'dbIP': '127.0.0.1',
|
|
12
|
+
// 'dbPort': 27017,
|
|
13
|
+
'dbUrl': './db',
|
|
10
14
|
'dbName': 'wperm',
|
|
11
|
-
'dbIP': '127.0.0.1',
|
|
12
|
-
'dbPort': 27017,
|
|
13
15
|
}
|
|
14
16
|
}
|
|
15
17
|
|
package/g.mOrm.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import WOrm from 'w-orm-
|
|
1
|
+
import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
2
2
|
import WServOrm from 'w-serv-orm/src/WServOrm.mjs'
|
|
3
3
|
import ds from './src/schema/index.mjs'
|
|
4
4
|
import getSettings from './g.getSettings.mjs'
|
|
@@ -8,7 +8,7 @@ import getSettings from './g.getSettings.mjs'
|
|
|
8
8
|
let st = getSettings()
|
|
9
9
|
|
|
10
10
|
//url, db
|
|
11
|
-
let url =
|
|
11
|
+
let url = st.dbUrl
|
|
12
12
|
let db = st.dbName
|
|
13
13
|
|
|
14
14
|
//WServOrm
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "w-web-perm",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.35",
|
|
4
4
|
"main": "dist/w-web-perm.umd.js",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@mdi/js": "^7.4.47",
|
|
7
|
-
"axios": "^1.
|
|
7
|
+
"axios": "^1.9.0",
|
|
8
8
|
"json5": "^2.2.3",
|
|
9
9
|
"lodash": "^4.17.21",
|
|
10
10
|
"showdown": "^2.1.0",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"eslint-plugin-vue": "^9.10.0",
|
|
30
30
|
"vue": "^2.6.14",
|
|
31
31
|
"vuex": "^3.6.2",
|
|
32
|
-
"w-orm-
|
|
32
|
+
"w-orm-lmdb": "^1.0.1",
|
|
33
33
|
"w-package-tools": "^1.1.2"
|
|
34
34
|
},
|
|
35
35
|
"scripts": {
|
package/server/WWebPerm.mjs
CHANGED
|
@@ -39,7 +39,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
39
39
|
* @param {String} url 輸入資料庫連線字串,例如'mongodb://sername:password@$127.0.0.1:27017'
|
|
40
40
|
* @param {String} db 輸入資料庫名稱字串
|
|
41
41
|
* @param {Function} getUserByToken 輸入處理函數,函數會傳入使用者token,通過此函數處理後並回傳使用者資訊物件,並至少須提供'id'、'email'、'name'、'isAdmin'欄位,且'isAdmin'限輸入'y'或'n',且輸入'y'時會複寫權限系統該使用者之'isAdmin'欄位值
|
|
42
|
-
* @param {Function}
|
|
42
|
+
* @param {Function} verifyClientUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
43
43
|
* @param {Function} verifyAppUser 輸入驗證應用程序使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
|
|
44
44
|
* @param {Object} [opt={}] 輸入設定物件,預設{}
|
|
45
45
|
* @param {Integer} [opt.serverPort=11006] 輸入伺服器通訊port,預設11006
|
|
@@ -55,7 +55,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
55
55
|
* @returns {Object} 回傳物件,其內server為hapi伺服器實體,wsrv為w-converhp的伺服器事件物件,wsds為w-serv-webdata的伺服器事件物件,可監聽error事件
|
|
56
56
|
* @example
|
|
57
57
|
*
|
|
58
|
-
* import WOrm from 'w-orm-
|
|
58
|
+
* import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
59
59
|
* import WWebPerm from './server/WWebPerm.mjs'
|
|
60
60
|
* import getSettings from './g.getSettings.mjs'
|
|
61
61
|
*
|
|
@@ -63,7 +63,7 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
63
63
|
* //st
|
|
64
64
|
* let st = getSettings()
|
|
65
65
|
*
|
|
66
|
-
* let url =
|
|
66
|
+
* let url = st.dbUrl
|
|
67
67
|
* let db = st.dbName
|
|
68
68
|
* let opt = {
|
|
69
69
|
*
|
|
@@ -110,8 +110,8 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
110
110
|
* return {}
|
|
111
111
|
* }
|
|
112
112
|
*
|
|
113
|
-
* let
|
|
114
|
-
* console.log('
|
|
113
|
+
* let verifyClientUser = (user, caller) => {
|
|
114
|
+
* console.log('verifyClientUser/user', user)
|
|
115
115
|
* // return false //測試無法登入
|
|
116
116
|
* console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
117
117
|
* return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
@@ -125,14 +125,14 @@ import { getUserRules } from '../src/plugins/mShare.mjs'
|
|
|
125
125
|
* }
|
|
126
126
|
*
|
|
127
127
|
* //WWebPerm
|
|
128
|
-
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken,
|
|
128
|
+
* let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt)
|
|
129
129
|
*
|
|
130
130
|
* instWWebPerm.on('error', (err) => {
|
|
131
131
|
* console.log(err)
|
|
132
132
|
* })
|
|
133
133
|
*
|
|
134
134
|
*/
|
|
135
|
-
function WWebPerm(WOrm, url, db, getUserByToken,
|
|
135
|
+
function WWebPerm(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt = {}) {
|
|
136
136
|
let instWServHapiServer = null
|
|
137
137
|
|
|
138
138
|
|
|
@@ -164,10 +164,10 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
164
164
|
}
|
|
165
165
|
|
|
166
166
|
|
|
167
|
-
//check
|
|
168
|
-
if (!isfun(
|
|
169
|
-
console.log('invalid
|
|
170
|
-
throw new Error('invalid
|
|
167
|
+
//check verifyClientUser
|
|
168
|
+
if (!isfun(verifyClientUser)) {
|
|
169
|
+
console.log('invalid verifyClientUser', verifyClientUser)
|
|
170
|
+
throw new Error('invalid verifyClientUser')
|
|
171
171
|
}
|
|
172
172
|
|
|
173
173
|
|
|
@@ -563,14 +563,15 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
563
563
|
}
|
|
564
564
|
|
|
565
565
|
|
|
566
|
-
//
|
|
567
|
-
let
|
|
566
|
+
//getAndVerifyClientUser
|
|
567
|
+
let getAndVerifyClientUser = async (token, caller = '') => {
|
|
568
|
+
//基於token查找client使用者, 會基於外部getUserByToken以及perm內部users進行查找並比對
|
|
568
569
|
|
|
569
570
|
//getTokenUser
|
|
570
571
|
let userSelf = await getTokenUser(token)
|
|
571
572
|
|
|
572
|
-
//
|
|
573
|
-
let b =
|
|
573
|
+
//verifyClientUser
|
|
574
|
+
let b = verifyClientUser(userSelf, caller)
|
|
574
575
|
if (ispm(b)) {
|
|
575
576
|
b = await b
|
|
576
577
|
}
|
|
@@ -586,9 +587,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
586
587
|
}
|
|
587
588
|
|
|
588
589
|
|
|
589
|
-
//
|
|
590
|
-
let
|
|
591
|
-
//基於token
|
|
590
|
+
//getAndVerifyAppUser
|
|
591
|
+
let getAndVerifyAppUser = async (token, caller = '') => {
|
|
592
|
+
//基於token查找app使用者, 會基於外部getUserByToken進行查找, 故只要getUserByToken提供使用者即可, 可支援getUserByToken給予針對應用程式所產生之虛擬使用者
|
|
592
593
|
|
|
593
594
|
//userSelf
|
|
594
595
|
let userSelf = null
|
|
@@ -868,8 +869,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
868
869
|
let token = get(req, 'query.token', '')
|
|
869
870
|
// console.log('token', token)
|
|
870
871
|
|
|
871
|
-
//
|
|
872
|
-
let userSelf = await
|
|
872
|
+
//getAndVerifyClientUser
|
|
873
|
+
let userSelf = await getAndVerifyClientUser(token, 'getUserByToken')
|
|
873
874
|
// console.log('userSelf', userSelf)
|
|
874
875
|
|
|
875
876
|
//check
|
|
@@ -897,14 +898,14 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
897
898
|
// console.log('getPerm', req)
|
|
898
899
|
|
|
899
900
|
async function core() {
|
|
900
|
-
//提供對象為node與browser使用者, node
|
|
901
|
+
//提供對象為node與browser使用者, 提供對象有node是因為幫忙轉發其他系統browser使用者驗證需求, 皆須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
|
|
901
902
|
|
|
902
903
|
//parseToken
|
|
903
904
|
let token = parseToken(req)
|
|
904
905
|
// console.log('token', token)
|
|
905
906
|
|
|
906
|
-
//
|
|
907
|
-
let userLogin = await
|
|
907
|
+
//getAndVerifyClientUser
|
|
908
|
+
let userLogin = await getAndVerifyClientUser(token, 'getPerm')
|
|
908
909
|
// console.log('userLogin', userLogin)
|
|
909
910
|
|
|
910
911
|
//check
|
|
@@ -962,8 +963,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
962
963
|
let token = get(req, 'query.token', '')
|
|
963
964
|
// console.log('token', token)
|
|
964
965
|
|
|
965
|
-
//
|
|
966
|
-
let userSelf = await
|
|
966
|
+
//getAndVerifyAppUser
|
|
967
|
+
let userSelf = await getAndVerifyAppUser(token, 'getPermById')
|
|
967
968
|
// console.log('userSelf', userSelf)
|
|
968
969
|
|
|
969
970
|
//check
|
|
@@ -1013,8 +1014,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1013
1014
|
//token
|
|
1014
1015
|
let token = get(req, 'query.token', '')
|
|
1015
1016
|
|
|
1016
|
-
//
|
|
1017
|
-
let user = await
|
|
1017
|
+
//getAndVerifyAppUser
|
|
1018
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceTargets')
|
|
1018
1019
|
|
|
1019
1020
|
//check
|
|
1020
1021
|
if (!iseobj(user)) {
|
|
@@ -1056,8 +1057,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1056
1057
|
//token
|
|
1057
1058
|
let token = get(req, 'query.token', '')
|
|
1058
1059
|
|
|
1059
|
-
//
|
|
1060
|
-
let user = await
|
|
1060
|
+
//getAndVerifyAppUser
|
|
1061
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplacePemis')
|
|
1061
1062
|
|
|
1062
1063
|
//check
|
|
1063
1064
|
if (!iseobj(user)) {
|
|
@@ -1099,8 +1100,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1099
1100
|
//token
|
|
1100
1101
|
let token = get(req, 'query.token', '')
|
|
1101
1102
|
|
|
1102
|
-
//
|
|
1103
|
-
let user = await
|
|
1103
|
+
//getAndVerifyAppUser
|
|
1104
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceGrups')
|
|
1104
1105
|
|
|
1105
1106
|
//check
|
|
1106
1107
|
if (!iseobj(user)) {
|
|
@@ -1142,8 +1143,8 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1142
1143
|
//token
|
|
1143
1144
|
let token = get(req, 'query.token', '')
|
|
1144
1145
|
|
|
1145
|
-
//
|
|
1146
|
-
let user = await
|
|
1146
|
+
//getAndVerifyAppUser
|
|
1147
|
+
let user = await getAndVerifyAppUser(token, 'syncAndReplaceUsers')
|
|
1147
1148
|
|
|
1148
1149
|
//check
|
|
1149
1150
|
if (!iseobj(user)) {
|
|
@@ -1188,6 +1189,9 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1188
1189
|
port: opt.serverPort,
|
|
1189
1190
|
pathStaticFiles,
|
|
1190
1191
|
apis,
|
|
1192
|
+
verifyConn: () => {
|
|
1193
|
+
return true
|
|
1194
|
+
},
|
|
1191
1195
|
getUserIdByToken: async (token) => { //可使用async或sync函數
|
|
1192
1196
|
// console.log('getUserIdByToken', token)
|
|
1193
1197
|
let user = await getUserByToken(token)
|
|
@@ -1199,6 +1203,7 @@ function WWebPerm(WOrm, url, db, getUserByToken, verifyBrowserUser, verifyAppUse
|
|
|
1199
1203
|
}
|
|
1200
1204
|
return userId
|
|
1201
1205
|
},
|
|
1206
|
+
corsOrigins: ['*'],
|
|
1202
1207
|
useDbOrm: true,
|
|
1203
1208
|
kpOrm: woItems,
|
|
1204
1209
|
operOrm: procOrm, //procOrm的輸入為: userId, tableName, methodName, input
|
package/srv.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import WOrm from 'w-orm-
|
|
1
|
+
import WOrm from 'w-orm-lmdb/src/WOrmLmdb.mjs'
|
|
2
2
|
import WWebPerm from './server/WWebPerm.mjs'
|
|
3
3
|
import getSettings from './g.getSettings.mjs'
|
|
4
4
|
|
|
@@ -6,7 +6,7 @@ import getSettings from './g.getSettings.mjs'
|
|
|
6
6
|
//st
|
|
7
7
|
let st = getSettings()
|
|
8
8
|
|
|
9
|
-
let url =
|
|
9
|
+
let url = st.dbUrl
|
|
10
10
|
let db = st.dbName
|
|
11
11
|
let opt = {
|
|
12
12
|
|
|
@@ -76,8 +76,8 @@ let getUserByToken = async (token) => {
|
|
|
76
76
|
return {}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
let
|
|
80
|
-
console.log('
|
|
79
|
+
let verifyClientUser = (user, caller) => {
|
|
80
|
+
console.log('verifyClientUser/user', user)
|
|
81
81
|
// return false //測試無法登入
|
|
82
82
|
console.log('於生產環境時得加入限制瀏覽器使用者身份機制')
|
|
83
83
|
return user.isAdmin === 'y' //測試僅系統管理者使用
|
|
@@ -91,7 +91,7 @@ let verifyAppUser = (user, caller) => {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
//WWebPerm
|
|
94
|
-
let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken,
|
|
94
|
+
let instWWebPerm = WWebPerm(WOrm, url, db, getUserByToken, verifyClientUser, verifyAppUser, opt)
|
|
95
95
|
|
|
96
96
|
instWWebPerm.on('error', (err) => {
|
|
97
97
|
console.log(err)
|
package/tableTags.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"grups":"2025-
|
|
1
|
+
{"grups":"2025-06-07T20:31:12+08:00|pA8uj9","pemis":"2025-06-07T20:31:12+08:00|6rSYtP","targets":"2025-06-07T20:31:12+08:00|WdWV9H","users":"2025-06-07T20:31:12+08:00|jnueTX"}
|