w-serv-orm 1.1.8 → 1.1.10

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.
@@ -85,16 +85,18 @@ insert(含mix之新增)為主鍵已存在即略過之冪等新增,回傳之id
85
85
  insert、save與mix之新增、修改,寫入前各欄位之字串皆經wsemi之clearXSS清除(白名單外之標籤轉義,白名單內之標籤刪除白名單外之屬性與危險網址,標籤外之文字只轉義會開始標籤之<,故'a < b'等數學式不改寫);select與del不經清除。
86
86
  字串主鍵若會被清除改寫(含HTML標記,如&lt;後緊接英文字母),整批reject且不寫入任何一筆(mix於任何步驟之前檢查新增與修改),訊息列其位置而不回顯主鍵,如'failed to save data, id contains HTML markup: data[1]';否則改寫後之主鍵與呼叫端所持者不同,以原主鍵查詢與刪除皆找不到。</p>
87
87
  <p>擴充函數(addFunCheck、addFunPreProcessing、addFunPostProcessing)屬於各實例,重建實例後須重新註冊;註冊時須傳入函數,否則立即拋錯(addFunCheck另令該實例之procOrm一律reject);註冊後約1毫秒(以計時器)才生效,在此之前之procOrm呼叫不會套用。
88
- 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,isAdmin,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
89
- 後處理只在使用者檢查、check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
90
- 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId與isAdmin,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
91
- 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),呼叫端提供之函數(getUserById與擴充函數)自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。</p></li></ul></dd>
88
+ 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
89
+ 後處理只在check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
90
+ 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
91
+ 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),擴充函數自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。</p>
92
+ <p>授權:procOrm不做授權,不檢查使用者,亦不依使用者過濾數據;userId只供寫入稽核欄位(userId、userIdUpdate)與交給擴充函數。procOrm開放給前端時(如讓前端經資料通道直接操作資料表),須由開放處負責授權;addFunCheck可掛額外檢查,惟伺服端程式之呼叫亦會經過。
93
+ 已移除之設定:useCheckUser、getUserById、useExcludeWhenNotAdmin,未給、null或false者照常建構,給予其他值即於建構時拋錯。</p></li></ul></dd>
92
94
 
93
95
 
94
96
 
95
97
  <dt class="tag-source">Source:</dt>
96
98
  <dd class="tag-source"><ul class="dummy"><li>
97
- <a href="WServOrm.mjs.html">WServOrm.mjs</a>, <a href="WServOrm.mjs.html#line100">line 100</a>
99
+ <a href="WServOrm.mjs.html">WServOrm.mjs</a>, <a href="WServOrm.mjs.html#line96">line 96</a>
98
100
  </li></ul></dd>
99
101
 
100
102
 
@@ -141,7 +143,7 @@ insert、save與mix之新增、修改,寫入前各欄位之字串皆經wsemi
141
143
 
142
144
  <h5 class="h5-examples">Example</h5>
143
145
 
144
- <pre class="prettyprint"><code>// import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM
145
146
  getUserById: null,
146
147
  useCheckUser: false,
147
148
  useExcludeWhenNotAdmin: false,
149
+ <pre class="prettyprint"><code>// import WOrm from 'w-orm-mongodb/src/WOrmMongodb.mjs' //自行選擇引用ORM
148
150
 
149
151
 
150
152
 
@@ -352,157 +354,7 @@ insert、save與mix之新增、修改,寫入前各欄位之字串皆經wsemi
352
354
  </td>
353
355
 
354
356
 
355
- <td class="description last"><p>輸入設定物件,預設{}</p>
356
- <h6>Properties</h6>
357
-
358
-
359
- <table class="params">
360
- <thead>
361
- <tr>
362
-
363
- <th>Name</th>
364
-
365
-
366
- <th>Type</th>
367
-
368
-
369
- <th>Attributes</th>
370
-
371
-
372
-
373
- <th>Default</th>
374
-
375
-
376
- <th class="last">Description</th>
377
- </tr>
378
- </thead>
379
-
380
- <tbody>
381
-
382
-
383
- <tr>
384
-
385
- <td class="name"><code>useCheckUser</code></td>
386
-
387
-
388
- <td class="type">
389
-
390
-
391
- <span class="param-type">Boolean</span>
392
-
393
-
394
-
395
-
396
- </td>
397
-
398
-
399
- <td class="attributes">
400
-
401
- &lt;optional><br>
402
-
403
-
404
-
405
-
406
-
407
- </td>
408
-
409
-
410
-
411
- <td class="default">
412
-
413
- <code>true</code>
414
-
415
- </td>
416
-
417
-
418
- <td class="description last"><p>輸入是否檢查使用者資訊布林值,預設true</p></td>
419
- </tr>
420
-
421
-
422
-
423
- <tr>
424
-
425
- <td class="name"><code>getUserById</code></td>
426
-
427
-
428
- <td class="type">
429
-
430
-
431
- <span class="param-type">function</span>
432
-
433
-
434
-
435
-
436
- </td>
437
-
438
-
439
- <td class="attributes">
440
-
441
- &lt;optional><br>
442
-
443
-
444
-
445
-
446
-
447
- </td>
448
-
449
-
450
-
451
- <td class="default">
452
-
453
- <code>null</code>
454
-
455
- </td>
456
-
457
-
458
- <td class="description last"><p>輸入當useCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null;建構時不檢查,未給或非函數時useCheckUser為true之procOrm呼叫一律reject</p></td>
459
- </tr>
460
-
461
-
462
-
463
- <tr>
464
-
465
- <td class="name"><code>useExcludeWhenNotAdmin</code></td>
466
-
467
-
468
- <td class="type">
469
-
470
-
471
- <span class="param-type">Boolean</span>
472
-
473
-
474
-
475
-
476
- </td>
477
-
478
-
479
- <td class="attributes">
480
-
481
- &lt;optional><br>
482
-
483
-
484
-
485
-
486
-
487
- </td>
488
-
489
-
490
-
491
- <td class="default">
492
-
493
- <code>true</code>
494
-
495
- </td>
496
-
497
-
498
- <td class="description last"><p>輸入非管理者使用procOrm之select時是否濾除isActive為'n'之數據布林值,預設true</p></td>
499
- </tr>
500
-
501
-
502
- </tbody>
503
- </table>
504
-
505
- </td>
357
+ <td class="description last"><p>輸入設定物件,預設{};目前無設定鍵,保留供日後擴充,已移除之設定見上述</p></td>
506
358
  </tr>
507
359
 
508
360
 
@@ -587,7 +439,7 @@ insert、save與mix之新增、修改,寫入前各欄位之字串皆經wsemi
587
439
  <br class="clear">
588
440
 
589
441
  <footer>
590
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 12 2026 13:45:56 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
442
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 06:34:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
591
443
  </footer>
592
444
 
593
445
  <script>prettyPrint();</script>
@@ -47,6 +47,7 @@
47
47
  <article>
48
48
  <pre class="prettyprint source linenums"><code>import pmSeries from 'wsemi/src/pmSeries.mjs'
49
49
  import isfun from 'wsemi/src/isfun.mjs'
50
+ import checkOptRemoved from './checkOptRemoved.mjs'
50
51
  import getDbBackupAndRecover from './getDbBackupAndRecover.mjs'
51
52
  import getWoItems from './getWoItems.mjs'
52
53
  import getMapOrm from './getMapOrm.mjs'
@@ -69,20 +70,20 @@ import getProc from './getProc.mjs'
69
70
  * 字串主鍵若會被清除改寫(含HTML標記,如&lt;後緊接英文字母),整批reject且不寫入任何一筆(mix於任何步驟之前檢查新增與修改),訊息列其位置而不回顯主鍵,如'failed to save data, id contains HTML markup: data[1]';否則改寫後之主鍵與呼叫端所持者不同,以原主鍵查詢與刪除皆找不到。
70
71
  *
71
72
  * 擴充函數(addFunCheck、addFunPreProcessing、addFunPostProcessing)屬於各實例,重建實例後須重新註冊;註冊時須傳入函數,否則立即拋錯(addFunCheck另令該實例之procOrm一律reject);註冊後約1毫秒(以計時器)才生效,在此之前之procOrm呼叫不會套用。
72
- * 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,isAdmin,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
73
- * 後處理只在使用者檢查、check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
74
- * 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId與isAdmin,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
75
- * 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),呼叫端提供之函數(getUserById與擴充函數)自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。
73
+ * 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
74
+ * 後處理只在check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
75
+ * 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
76
+ * 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),擴充函數自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。
77
+ *
78
+ * 授權:procOrm不做授權,不檢查使用者,亦不依使用者過濾數據;userId只供寫入稽核欄位(userId、userIdUpdate)與交給擴充函數。procOrm開放給前端時(如讓前端經資料通道直接操作資料表),須由開放處負責授權;addFunCheck可掛額外檢查,惟伺服端程式之呼叫亦會經過。
79
+ * 已移除之設定:useCheckUser、getUserById、useExcludeWhenNotAdmin,未給、null或false者照常建構,給予其他值即於建構時拋錯。
76
80
  *
77
81
  * @class
78
82
  * @param {Object} ds 輸入資料表設定物件
79
83
  * @param {Object} WOrm 輸入資料庫ORM物件
80
84
  * @param {String} url 輸入資料庫連線位址字串
81
85
  * @param {String} db 輸入資料庫名稱字串
82
- * @param {Object} [opt={}] 輸入設定物件,預設{}
83
- * @param {Boolean} [opt.useCheckUser=true] 輸入是否檢查使用者資訊布林值,預設true
84
- * @param {Function} [opt.getUserById=null] 輸入當useCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null;建構時不檢查,未給或非函數時useCheckUser為true之procOrm呼叫一律reject
85
- * @param {Boolean} [opt.useExcludeWhenNotAdmin=true] 輸入非管理者使用procOrm之select時是否濾除isActive為'n'之數據布林值,預設true
86
+ * @param {Object} [opt={}] 輸入設定物件,預設{};目前無設定鍵,保留供日後擴充,已移除之設定見上述
86
87
  * @returns {Object} 回傳伺服器ORM支援物件,含woItems(各資料表ORM實例)、procOrm(資料操作函數,輸入為userId、woName、mode、input)、addFunCheck、addFunPreProcessing、addFunPostProcessing、closeAll(逐一關閉各資料表ORM之連線),以及backup(woItems)與recover(fp, woItems, genModels, needCreateStorage);後兩者不綁定本實例,須自行傳入woItems(須為非空物件,否則reject),其參數順序與getDb之recover(woItems, fp, opt)不同;recover於寫入前驗證備份內容(須為非空陣列且各筆之name為woItems內之資料表),失敗時reject,逐表寫入時中途失敗則先前之表已寫入
87
88
  * @example
88
89
  *
@@ -107,12 +108,7 @@ import getProc from './getProc.mjs'
107
108
  * let db = 'worm'
108
109
  *
109
110
  * //WServOrm
110
- * let opt = {
111
- * getUserById: null,
112
- * useCheckUser: false,
113
- * useExcludeWhenNotAdmin: false,
114
- * }
115
- * let r = WServOrm(ds, WOrm, url, db, opt)
111
+ * let r = WServOrm(ds, WOrm, url, db)
116
112
  * console.log(r) //回傳server用orm相關函數
117
113
  * // => {
118
114
  * // backup: [AsyncFunction: backup],
@@ -146,6 +142,9 @@ import getProc from './getProc.mjs'
146
142
  */
147
143
  function WServOrm(ds, WOrm, url, db, opt = {}) {
148
144
 
145
+ //checkOptRemoved, 須於建立各資料表ORM之前, 否則拋錯時已開啟之ORM(如lmdb之檔案)無從關閉; getProc收到opt時會再檢查一次, 無副作用
146
+ checkOptRemoved(opt)
147
+
149
148
  //getWoItems
150
149
  let woItems = getWoItems(ds, WOrm, url, db)
151
150
  // console.log('woItems', woItems)
@@ -192,7 +191,7 @@ export default WServOrm
192
191
  <br class="clear">
193
192
 
194
193
  <footer>
195
- Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Mon Oct 12 2026 13:45:56 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
194
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 4.0.5</a> on Tue Oct 13 2026 06:34:48 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
196
195
  </footer>
197
196
 
198
197
  <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.5</a> on Mon Oct 12 2026 13:45:56 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.5</a> on Tue Oct 13 2026 06:34:48 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-mOrm.mjs CHANGED
@@ -20,12 +20,7 @@ let url = './db.json'
20
20
  let db = 'worm'
21
21
 
22
22
  //WServOrm
23
- let opt = {
24
- getUserById: null,
25
- useCheckUser: false,
26
- useExcludeWhenNotAdmin: false,
27
- }
28
- let r = WServOrm(ds, WOrm, url, db, opt)
23
+ let r = WServOrm(ds, WOrm, url, db)
29
24
  console.log(r) //回傳server用orm相關函數
30
25
  // => {
31
26
  // backup: [AsyncFunction: backup],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "w-serv-orm",
3
- "version": "1.1.8",
3
+ "version": "1.1.10",
4
4
  "main": "dist/w-serv-orm.umd.js",
5
5
  "dependencies": {
6
6
  "json5": "^2.2.3",
package/src/WServOrm.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  import pmSeries from 'wsemi/src/pmSeries.mjs'
2
2
  import isfun from 'wsemi/src/isfun.mjs'
3
+ import checkOptRemoved from './checkOptRemoved.mjs'
3
4
  import getDbBackupAndRecover from './getDbBackupAndRecover.mjs'
4
5
  import getWoItems from './getWoItems.mjs'
5
6
  import getMapOrm from './getMapOrm.mjs'
@@ -22,20 +23,20 @@ import getProc from './getProc.mjs'
22
23
  * 字串主鍵若會被清除改寫(含HTML標記,如<後緊接英文字母),整批reject且不寫入任何一筆(mix於任何步驟之前檢查新增與修改),訊息列其位置而不回顯主鍵,如'failed to save data, id contains HTML markup: data[1]';否則改寫後之主鍵與呼叫端所持者不同,以原主鍵查詢與刪除皆找不到。
23
24
  *
24
25
  * 擴充函數(addFunCheck、addFunPreProcessing、addFunPostProcessing)屬於各實例,重建實例後須重新註冊;註冊時須傳入函數,否則立即拋錯(addFunCheck另令該實例之procOrm一律reject);註冊後約1毫秒(以計時器)才生效,在此之前之procOrm呼叫不會套用。
25
- * 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,isAdmin,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
26
- * 後處理只在使用者檢查、check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
27
- * 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId與isAdmin,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
28
- * 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),呼叫端提供之函數(getUserById與擴充函數)自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。
26
+ * 呼叫契約:check以reject或拋錯阻擋,回傳值不影響結果,且早於前處理執行;前處理逐一呼叫,各收新建之參數物件{woName,userId,mode,input},input為前一個回傳之input,回傳須為含input之物件否則reject;後處理逐一呼叫,各收新建之參數物件且其output為前一個之回傳值,最後之回傳值即為procOrm之回傳值。
27
+ * 後處理只在check、前處理與ORM操作皆成功後執行,逐筆失敗(含del)或mix部分寫入後reject者皆不執行;後處理自身亦可reject。後處理之input為呼叫端傳入之數據,不含本套件補出之主鍵,主鍵見output。
28
+ * 如需觀察ORM實際寫入,可另監聽woItems內各ORM之change與error事件;惟事件由ORM發出,不含userId,mix會依步驟分次發出,經woItems直接寫入者亦會發出,insert之結果為聚合計數而非逐筆。
29
+ * 錯誤型別:procOrm由本套件產生之reject一律為英文訊息字串(供前端顯示或對應多語系;ORM之錯誤原文另由console.log輸出而不轉出),擴充函數自身之reject或拋錯則原樣轉出;建構(設定或ORM無效)、擴充函數註冊、backup與recover由本套件產生之錯誤一律為Error,ORM之錯誤則原樣轉出。
30
+ *
31
+ * 授權:procOrm不做授權,不檢查使用者,亦不依使用者過濾數據;userId只供寫入稽核欄位(userId、userIdUpdate)與交給擴充函數。procOrm開放給前端時(如讓前端經資料通道直接操作資料表),須由開放處負責授權;addFunCheck可掛額外檢查,惟伺服端程式之呼叫亦會經過。
32
+ * 已移除之設定:useCheckUser、getUserById、useExcludeWhenNotAdmin,未給、null或false者照常建構,給予其他值即於建構時拋錯。
29
33
  *
30
34
  * @class
31
35
  * @param {Object} ds 輸入資料表設定物件
32
36
  * @param {Object} WOrm 輸入資料庫ORM物件
33
37
  * @param {String} url 輸入資料庫連線位址字串
34
38
  * @param {String} db 輸入資料庫名稱字串
35
- * @param {Object} [opt={}] 輸入設定物件,預設{}
36
- * @param {Boolean} [opt.useCheckUser=true] 輸入是否檢查使用者資訊布林值,預設true
37
- * @param {Function} [opt.getUserById=null] 輸入當useCheckUser=true時依照使用者ID取得使用者資訊物件函數,預設null;建構時不檢查,未給或非函數時useCheckUser為true之procOrm呼叫一律reject
38
- * @param {Boolean} [opt.useExcludeWhenNotAdmin=true] 輸入非管理者使用procOrm之select時是否濾除isActive為'n'之數據布林值,預設true
39
+ * @param {Object} [opt={}] 輸入設定物件,預設{};目前無設定鍵,保留供日後擴充,已移除之設定見上述
39
40
  * @returns {Object} 回傳伺服器ORM支援物件,含woItems(各資料表ORM實例)、procOrm(資料操作函數,輸入為userId、woName、mode、input)、addFunCheck、addFunPreProcessing、addFunPostProcessing、closeAll(逐一關閉各資料表ORM之連線),以及backup(woItems)與recover(fp, woItems, genModels, needCreateStorage);後兩者不綁定本實例,須自行傳入woItems(須為非空物件,否則reject),其參數順序與getDb之recover(woItems, fp, opt)不同;recover於寫入前驗證備份內容(須為非空陣列且各筆之name為woItems內之資料表),失敗時reject,逐表寫入時中途失敗則先前之表已寫入
40
41
  * @example
41
42
  *
@@ -60,12 +61,7 @@ import getProc from './getProc.mjs'
60
61
  * let db = 'worm'
61
62
  *
62
63
  * //WServOrm
63
- * let opt = {
64
- * getUserById: null,
65
- * useCheckUser: false,
66
- * useExcludeWhenNotAdmin: false,
67
- * }
68
- * let r = WServOrm(ds, WOrm, url, db, opt)
64
+ * let r = WServOrm(ds, WOrm, url, db)
69
65
  * console.log(r) //回傳server用orm相關函數
70
66
  * // => {
71
67
  * // backup: [AsyncFunction: backup],
@@ -99,6 +95,9 @@ import getProc from './getProc.mjs'
99
95
  */
100
96
  function WServOrm(ds, WOrm, url, db, opt = {}) {
101
97
 
98
+ //checkOptRemoved, 須於建立各資料表ORM之前, 否則拋錯時已開啟之ORM(如lmdb之檔案)無從關閉; getProc收到opt時會再檢查一次, 無副作用
99
+ checkOptRemoved(opt)
100
+
102
101
  //getWoItems
103
102
  let woItems = getWoItems(ds, WOrm, url, db)
104
103
  // console.log('woItems', woItems)
@@ -0,0 +1,25 @@
1
+ import get from 'lodash-es/get.js'
2
+
3
+
4
+ function checkOptRemoved(opt) {
5
+ //已移除之設定: 未給、null或false者接受(使用端現行之設定), 其餘值拋錯, 避免使用端以為仍有檢查而無聲失去
6
+ //useCheckUser只查使用者存在且有效, 屬認證而非授權, 卻曾被當成授權; procOrm不做授權, 須由procOrm開放給前端之處負責
7
+ //useExcludeWhenNotAdmin依賴只有useCheckUser才產生之isAdmin, 未開useCheckUser時會把所有人當非管理者過濾, 一併移除
8
+ //收opt之進入點(WServOrm、getProc)皆須呼叫, 直接呼叫getProc者亦不得靜默忽略
9
+ //使用端包裝層可直接呼叫以檢查其自身之opt, 只看這三鍵, opt之其他鍵不受影響, 通過時回傳undefined
10
+ let msgAuth = 'procOrm does not authorize users, authorize where procOrm is exposed to clients'
11
+ let ks = [
12
+ ['useCheckUser', msgAuth],
13
+ ['getUserById', msgAuth],
14
+ ['useExcludeWhenNotAdmin', 'procOrm does not filter select results by user, use addFunPostProcessing if needed'],
15
+ ]
16
+ for (let [k, hint] of ks) {
17
+ let v = get(opt, k)
18
+ if (v !== undefined && v !== null && v !== false) {
19
+ throw new Error(`opt.${k} has been removed, ${hint}`)
20
+ }
21
+ }
22
+ }
23
+
24
+
25
+ export default checkOptRemoved