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.
Files changed (37) hide show
  1. package/README.md +2 -2
  2. package/db/wperm/grups/data.mdb +0 -0
  3. package/db/wperm/grups/lock.mdb +0 -0
  4. package/db/wperm/pemis/data.mdb +0 -0
  5. package/db/wperm/pemis/lock.mdb +0 -0
  6. package/db/wperm/targets/data.mdb +0 -0
  7. package/db/wperm/targets/lock.mdb +0 -0
  8. package/db/wperm/users/data.mdb +0 -0
  9. package/db/wperm/users/lock.mdb +0 -0
  10. package/dist/index.tmp +1 -1
  11. package/dist/js/app-legacy.7b8702cb.js +2 -0
  12. package/dist/js/app-legacy.7b8702cb.js.map +1 -0
  13. package/dist/js/app.7b8702cb.js +2 -0
  14. package/dist/js/app.7b8702cb.js.map +1 -0
  15. package/dist/js/chunk-vendors-legacy.f49fb888.js +15 -0
  16. package/dist/js/chunk-vendors-legacy.f49fb888.js.map +1 -0
  17. package/dist/js/chunk-vendors.f49fb888.js +15 -0
  18. package/dist/js/chunk-vendors.f49fb888.js.map +1 -0
  19. package/dist/w-web-perm.umd.js +2 -2
  20. package/dist/w-web-perm.umd.js.map +1 -1
  21. package/docs/WWebPerm.html +4 -4
  22. package/docs/WWebPerm.mjs.html +39 -34
  23. package/docs/index.html +1 -1
  24. package/g.getSettings.mjs +6 -4
  25. package/g.mOrm.mjs +2 -2
  26. package/package.json +3 -3
  27. package/server/WWebPerm.mjs +38 -33
  28. package/srv.mjs +5 -5
  29. package/tableTags.json +1 -1
  30. package/dist/js/app-legacy.4bd35604.js +0 -2
  31. package/dist/js/app-legacy.4bd35604.js.map +0 -1
  32. package/dist/js/app.4bd35604.js +0 -2
  33. package/dist/js/app.4bd35604.js.map +0 -1
  34. package/dist/js/chunk-vendors-legacy.cfa263df.js +0 -13
  35. package/dist/js/chunk-vendors-legacy.cfa263df.js.map +0 -1
  36. package/dist/js/chunk-vendors.cfa263df.js +0 -13
  37. package/dist/js/chunk-vendors.cfa263df.js.map +0 -1
@@ -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, verifyBrowserUser, verifyAppUser, opt<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Object}</span></h4>
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"> &rarr; {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>verifyBrowserUser</code></td>
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.2</a> on Fri Jun 06 2025 14:22:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
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>
@@ -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} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
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-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
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 = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}` //使用Mongodb測試
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 verifyBrowserUser = (user, caller) => {
161
- * console.log('verifyBrowserUser/user', user)
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, verifyBrowserUser, verifyAppUser, opt)
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, verifyBrowserUser, verifyAppUser, opt = {}) {
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 verifyBrowserUser
215
- if (!isfun(verifyBrowserUser)) {
216
- console.log('invalid verifyBrowserUser', verifyBrowserUser)
217
- throw new Error('invalid verifyBrowserUser')
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
- //getAndVerifyBrowserTokenUser
614
- let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
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
- //verifyBrowserUser
620
- let b = verifyBrowserUser(userSelf, caller)
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
- //getAndVerifyAppTokenUser
637
- let getAndVerifyAppTokenUser = async (token, caller = '') => {
638
- //基於token查找使用者, 會基於外部getUserByToken進行查找, 故只要getUserByToken提供使用者即可, 可支援getUserByToken給予針對應用程式所產生之虛擬使用者
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
- //getAndVerifyBrowserTokenUser
919
- let userSelf = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
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通常也為其他系統之browser使用者因須驗證而由node轉發, 皆須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
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
- //getAndVerifyBrowserTokenUser
954
- let userLogin = await getAndVerifyBrowserTokenUser(token, 'getPerm')
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
- //getAndVerifyAppTokenUser
1013
- let userSelf = await getAndVerifyAppTokenUser(token, 'getPermById')
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
- //getAndVerifyAppTokenUser
1064
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceTargets')
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
- //getAndVerifyAppTokenUser
1107
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplacePemis')
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
- //getAndVerifyAppTokenUser
1150
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceGrups')
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
- //getAndVerifyAppTokenUser
1193
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceUsers')
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.2</a> on Fri Jun 06 2025 14:22:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
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.2</a> on Fri Jun 06 2025 14:22:12 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
74
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.4</a> on 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-mongodb/src/WOrmMongodb.mjs'
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 = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}`
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.34",
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.7",
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-mongodb": "^1.1.33",
32
+ "w-orm-lmdb": "^1.0.1",
33
33
  "w-package-tools": "^1.1.2"
34
34
  },
35
35
  "scripts": {
@@ -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} verifyBrowserUser 輸入驗證瀏覽使用者身份之處理函數,函數會傳入使用者資訊物件,通過此函數識別後回傳布林值,允許使用者回傳true,反之回傳false
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-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
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 = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}` //使用Mongodb測試
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 verifyBrowserUser = (user, caller) => {
114
- * console.log('verifyBrowserUser/user', user)
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, verifyBrowserUser, verifyAppUser, opt)
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, verifyBrowserUser, verifyAppUser, opt = {}) {
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 verifyBrowserUser
168
- if (!isfun(verifyBrowserUser)) {
169
- console.log('invalid verifyBrowserUser', verifyBrowserUser)
170
- throw new Error('invalid verifyBrowserUser')
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
- //getAndVerifyBrowserTokenUser
567
- let getAndVerifyBrowserTokenUser = async (token, caller = '') => {
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
- //verifyBrowserUser
573
- let b = verifyBrowserUser(userSelf, caller)
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
- //getAndVerifyAppTokenUser
590
- let getAndVerifyAppTokenUser = async (token, caller = '') => {
591
- //基於token查找使用者, 會基於外部getUserByToken進行查找, 故只要getUserByToken提供使用者即可, 可支援getUserByToken給予針對應用程式所產生之虛擬使用者
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
- //getAndVerifyBrowserTokenUser
872
- let userSelf = await getAndVerifyBrowserTokenUser(token, 'getUserByToken')
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通常也為其他系統之browser使用者因須驗證而由node轉發, 皆須先檢測token是否有效, 再依照token取得使用者資訊物件, 再由其userId查詢回傳該使用者之權限資訊物件
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
- //getAndVerifyBrowserTokenUser
907
- let userLogin = await getAndVerifyBrowserTokenUser(token, 'getPerm')
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
- //getAndVerifyAppTokenUser
966
- let userSelf = await getAndVerifyAppTokenUser(token, 'getPermById')
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
- //getAndVerifyAppTokenUser
1017
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceTargets')
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
- //getAndVerifyAppTokenUser
1060
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplacePemis')
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
- //getAndVerifyAppTokenUser
1103
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceGrups')
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
- //getAndVerifyAppTokenUser
1146
- let user = await getAndVerifyAppTokenUser(token, 'syncAndReplaceUsers')
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-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM, 使用Mongodb測試
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 = `mongodb://${st.dbUsername}:${st.dbPassword}@${st.dbIP}:${st.dbPort}` //使用Mongodb測試
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 verifyBrowserUser = (user, caller) => {
80
- console.log('verifyBrowserUser/user', user)
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, verifyBrowserUser, verifyAppUser, opt)
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-05-18T21:46:26+08:00|6EnTdq","pemis":"2025-05-18T21:46:26+08:00|IDRIrx","targets":"2025-05-18T21:46:26+08:00|F0IP0H","users":"2025-05-18T21:46:26+08:00|Ci553C"}
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"}