w-web-perm 1.1.12 → 1.1.13

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 (124) hide show
  1. package/README.md +158 -123
  2. package/dist/css/app.f09c7433.css +1 -0
  3. package/dist/index.tmp +1 -1
  4. package/dist/js/app-legacy.8af87052.js +1 -0
  5. package/dist/js/app.8af87052.js +1 -0
  6. package/dist/js/{chunk-vendors.3e9e3ef1.js → chunk-vendors-legacy.ece5a361.js} +1 -1
  7. package/dist/js/{chunk-vendors-legacy.3e9e3ef1.js → chunk-vendors.ece5a361.js} +1 -1
  8. package/dist/w-web-perm.umd.js +2 -2
  9. package/dist/w-web-perm.umd.js.map +1 -1
  10. package/docs/WWebPerm.html +84 -4
  11. package/docs/global.html +23023 -1125
  12. package/docs/index.html +2 -2
  13. package/docs/server_WWebPerm.mjs.html +232 -32
  14. package/docs/server_cascadeWrite.mjs.html +225 -0
  15. package/docs/server_dataChannel.mjs.html +2 -2
  16. package/docs/server_keyCheck.mjs.html +353 -0
  17. package/docs/server_lockSave.mjs.html +2 -2
  18. package/docs/server_maskLog.mjs.html +2 -2
  19. package/docs/server_procCore.mjs.html +180 -41
  20. package/docs/server_staLogs_resolveShellWorker.mjs.html +2 -2
  21. package/docs/server_syncKeep.mjs.html +311 -0
  22. package/docs/server_tools_authRefsAudit.mjs.html +247 -0
  23. package/docs/server_tools_authRefsClean.mjs.html +335 -0
  24. package/docs/server_tools_fromTools.mjs.html +797 -0
  25. package/docs/server_tools_isMain.mjs.html +103 -0
  26. package/docs/server_tools_nameDupReport.mjs.html +280 -0
  27. package/docs/server_validateRows.mjs.html +2 -2
  28. package/docs/server_wrapInjected.mjs.html +3 -3
  29. package/docs/src_fetchJson.mjs.html +2 -2
  30. package/docs/src_js_cvKpToArr.mjs.html +2 -2
  31. package/docs/src_js_cvKpToObj.mjs.html +44 -33
  32. package/docs/src_js_draftSync.mjs.html +142 -0
  33. package/docs/src_js_eachOwn.mjs.html +3 -3
  34. package/docs/src_js_editorRefRows.mjs.html +356 -0
  35. package/docs/src_js_externalRows.mjs.html +338 -0
  36. package/docs/src_js_externalUi.mjs.html +230 -0
  37. package/docs/src_js_findRefRows.mjs.html +107 -0
  38. package/docs/src_js_findTouchedDup.mjs.html +150 -0
  39. package/docs/src_js_fmtLossyMsg.mjs.html +2 -2
  40. package/docs/src_js_fromAudit.mjs.html +489 -0
  41. package/docs/src_js_getAddImpact.mjs.html +269 -0
  42. package/docs/src_js_getAuthWarn.mjs.html +463 -0
  43. package/docs/src_js_getCascadePreview.mjs.html +258 -0
  44. package/docs/src_js_getDelRefCount.mjs.html +210 -0
  45. package/docs/src_js_getEffMode.mjs.html +92 -0
  46. package/docs/src_js_getKpLossy.mjs.html +47 -52
  47. package/docs/src_js_getNameErrs.mjs.html +266 -0
  48. package/docs/src_js_getOwn.mjs.html +3 -3
  49. package/docs/src_js_getPropKey.mjs.html +109 -0
  50. package/docs/src_js_getRuleEnable.mjs.html +2 -2
  51. package/docs/src_js_isAuthMode.mjs.html +4 -4
  52. package/docs/src_js_joinNames.mjs.html +2 -2
  53. package/docs/src_js_legendFit.mjs.html +2 -2
  54. package/docs/src_js_pairRowsToSnapshot.mjs.html +156 -0
  55. package/docs/src_js_refAudit.mjs.html +359 -0
  56. package/docs/src_js_refCascade.mjs.html +572 -0
  57. package/docs/src_js_relDialogSend.mjs.html +199 -0
  58. package/docs/src_js_rowDigest.mjs.html +265 -0
  59. package/docs/src_plugins_dataReloadGuard.mjs.html +109 -0
  60. package/docs/src_plugins_reuseDeletedIds.mjs.html +2 -2
  61. package/docs/src_plugins_submitGuard.mjs.html +2 -2
  62. package/g_authRefsClean.mjs +79 -0
  63. package/g_fixFromType.mjs +92 -0
  64. package/g_initialData.mjs +3 -3
  65. package/g_purgeFrom.mjs +127 -0
  66. package/package.json +1 -1
  67. package/server/WWebPerm.mjs +230 -30
  68. package/server/cascadeWrite.mjs +153 -0
  69. package/server/keyCheck.mjs +281 -0
  70. package/server/procCore.mjs +178 -39
  71. package/server/procLang.mjs +270 -3
  72. package/server/syncKeep.mjs +239 -0
  73. package/server/tools/authRefsAudit.mjs +175 -0
  74. package/server/tools/authRefsClean.mjs +263 -0
  75. package/server/tools/fromTools.mjs +725 -0
  76. package/server/tools/isMain.mjs +31 -0
  77. package/server/tools/nameDupReport.mjs +208 -0
  78. package/server/wrapInjected.mjs +1 -1
  79. package/src/components/LayoutContentGrups.vue +396 -75
  80. package/src/components/LayoutContentPemis.vue +395 -75
  81. package/src/components/LayoutContentTargets.vue +261 -25
  82. package/src/components/LayoutContentUsers.vue +334 -97
  83. package/src/components/VeCgrups.vue +88 -129
  84. package/src/components/VeCpemis.vue +86 -129
  85. package/src/components/VeCrules.vue +15 -5
  86. package/src/components/VeGrupBlngUsers.vue +202 -89
  87. package/src/components/VePemiBlngGrups.vue +209 -99
  88. package/src/js/cvKpToObj.mjs +42 -31
  89. package/src/js/draftSync.mjs +70 -0
  90. package/src/js/eachOwn.mjs +1 -1
  91. package/src/js/editorRefRows.mjs +284 -0
  92. package/src/js/externalRows.mjs +266 -0
  93. package/src/js/externalUi.mjs +158 -0
  94. package/src/js/findRefRows.mjs +35 -0
  95. package/src/js/findTouchedDup.mjs +78 -0
  96. package/src/js/fromAudit.mjs +417 -0
  97. package/src/js/getAddImpact.mjs +197 -0
  98. package/src/js/getAuthWarn.mjs +391 -0
  99. package/src/js/getCascadePreview.mjs +186 -0
  100. package/src/js/getDelRefCount.mjs +138 -0
  101. package/src/js/getEffMode.mjs +20 -0
  102. package/src/js/getKpLossy.mjs +44 -49
  103. package/src/js/getNameErrs.mjs +194 -0
  104. package/src/js/getOwn.mjs +1 -1
  105. package/src/js/getPropKey.mjs +37 -0
  106. package/src/js/isAuthMode.mjs +2 -2
  107. package/src/js/pairRowsToSnapshot.mjs +84 -0
  108. package/src/js/refAudit.mjs +287 -0
  109. package/src/js/refCascade.mjs +500 -0
  110. package/src/js/relDialogSend.mjs +127 -0
  111. package/src/js/rowDigest.mjs +193 -0
  112. package/src/plugins/dataReloadGuard.mjs +37 -0
  113. package/src/plugins/mShare.mjs +144 -140
  114. package/src/plugins/mUI.mjs +3 -8
  115. package/src/schema/tables/users.mjs +152 -152
  116. package/dist/css/app.6918ec45.css +0 -1
  117. package/dist/js/app-legacy.7cb7e394.js +0 -1
  118. package/dist/js/app.7cb7e394.js +0 -1
  119. package/docs/src_js_getKeyOrderLost.mjs.html +0 -121
  120. package/docs/src_js_getKpWriteLost.mjs.html +0 -100
  121. package/docs/src_js_keepKeyOrder.mjs.html +0 -139
  122. package/src/js/getKeyOrderLost.mjs +0 -49
  123. package/src/js/getKpWriteLost.mjs +0 -28
  124. package/src/js/keepKeyOrder.mjs +0 -67
@@ -1,152 +1,152 @@
1
- import map from 'lodash-es/map.js'
2
- import keys from 'lodash-es/keys.js'
3
- import genIDSeq from 'wsemi/src/genIDSeq.mjs'
4
- import dtmapping from 'wsemi/src/dtmapping.mjs'
5
- import dtpick from 'wsemi/src/dtpick.mjs'
6
- import nowms2str from 'wsemi/src/nowms2str.mjs'
7
-
8
-
9
- let keyTable = 'users'
10
- let tableNameCht = '使用者'
11
- let tableNameEng = 'Users'
12
-
13
-
14
- let settings = {
15
- id: {
16
- pk: true,
17
- name: '主鍵',
18
- type: 'STRING',
19
- },
20
- order: {
21
- name: '順序',
22
- type: 'INTEGER',
23
- },
24
- name: {
25
- name: '姓名',
26
- type: 'STRING',
27
- },
28
- email: {
29
- name: '電子郵件',
30
- type: 'STRING',
31
- },
32
- description: {
33
- name: '描述',
34
- type: 'TEXT',
35
- },
36
- from: {
37
- name: '來源', //標注使用者來源, 亦供外部批次變更使用
38
- type: 'STRING',
39
- },
40
- cgrups: {
41
- name: '權限群組清單', //為json字串
42
- type: 'TEXT',
43
- },
44
- isAdmin: {
45
- name: '是否為系統管理員',
46
- type: 'STRING',
47
- },
48
- userId: {
49
- name: '創建使用者主鍵',
50
- type: 'STRING',
51
- },
52
- timeCreate: {
53
- name: '創建時間',
54
- type: 'STRING',
55
- },
56
- userIdUpdate: {
57
- name: '最新變更使用者主鍵',
58
- type: 'STRING',
59
- },
60
- timeUpdate: {
61
- name: '更新時間',
62
- type: 'STRING',
63
- },
64
- isActive: {
65
- name: '是否有效',
66
- type: 'STRING',
67
- },
68
- }
69
-
70
- let funNew = (ndata = {}) => {
71
- let o = dtmapping(ndata, keys(settings))
72
- o.id = `${genIDSeq()}`
73
- o.isAdmin = 'n'
74
- o.userIdUpdate = o.userId
75
- o.timeCreate = nowms2str()
76
- o.userIdUpdate = o.userId
77
- o.timeUpdate = o.timeCreate
78
- o.isActive = 'y'
79
- return o
80
- }
81
-
82
- let funTest = () => {
83
- let rs = [
84
-
85
- ['peter', 'teamA', `
86
- {
87
- '權限群組M1': {
88
- 'mode': 'OR',
89
- 'isActive': 'y',
90
- }
91
- }
92
- `, 'n'],
93
- ['mary', 'teamA', `
94
- {
95
- '權限群組M2': {
96
- 'mode': 'OR',
97
- 'isActive': 'y',
98
- }
99
- }
100
- `, 'n'],
101
- ['john', 'teamA', `
102
- {
103
- '權限群組M3': {
104
- 'mode': 'OR',
105
- 'isActive': 'y',
106
- }
107
- }
108
- `, 'n'],
109
- ['admin', '', `
110
- {
111
- '權限群組M4': {
112
- 'mode': 'OR',
113
- 'isActive': 'y',
114
- }
115
- }
116
- `, 'y'],
117
-
118
- ]
119
- rs = map(rs, ([name, from, cgrups, isAdmin], k) => {
120
- let v = funNew({
121
- userId: 'id-for-admin',
122
- order: k,
123
- name,
124
- email: `${name}@example.com`,
125
- from,
126
- cgrups,
127
- isAdmin,
128
- })
129
- v.id = `id-for-${name}`
130
- // if (name === 'john') {
131
- // v.email = `${v.email};john@test.com`
132
- // }
133
- v.isAdmin = isAdmin
134
- v = dtpick(v, keys(settings))
135
- return v
136
- })
137
- console.log(`已產生: ${keyTable} 測試資料`, rs)
138
- return rs
139
- }
140
-
141
- let tab = {
142
- keyTable,
143
- tableNameCht,
144
- tableNameEng,
145
- settings,
146
- funNew,
147
- funTest,
148
- }
149
-
150
-
151
- export default tab
152
-
1
+ import map from 'lodash-es/map.js'
2
+ import keys from 'lodash-es/keys.js'
3
+ import genIDSeq from 'wsemi/src/genIDSeq.mjs'
4
+ import dtmapping from 'wsemi/src/dtmapping.mjs'
5
+ import dtpick from 'wsemi/src/dtpick.mjs'
6
+ import nowms2str from 'wsemi/src/nowms2str.mjs'
7
+
8
+
9
+ let keyTable = 'users'
10
+ let tableNameCht = '使用者'
11
+ let tableNameEng = 'Users'
12
+
13
+
14
+ let settings = {
15
+ id: {
16
+ pk: true,
17
+ name: '主鍵',
18
+ type: 'STRING',
19
+ },
20
+ order: {
21
+ name: '順序',
22
+ type: 'INTEGER',
23
+ },
24
+ name: {
25
+ name: '姓名',
26
+ type: 'STRING',
27
+ },
28
+ email: {
29
+ name: '電子郵件',
30
+ type: 'STRING',
31
+ },
32
+ description: {
33
+ name: '描述',
34
+ type: 'TEXT',
35
+ },
36
+ from: {
37
+ name: '來源', //標注使用者來源, 亦供外部批次變更使用
38
+ type: 'STRING',
39
+ },
40
+ cgrups: {
41
+ name: '權限群組清單', //為json字串
42
+ type: 'TEXT',
43
+ },
44
+ isAdmin: {
45
+ name: '是否為系統管理員',
46
+ type: 'STRING',
47
+ },
48
+ userId: {
49
+ name: '創建使用者主鍵',
50
+ type: 'STRING',
51
+ },
52
+ timeCreate: {
53
+ name: '創建時間',
54
+ type: 'STRING',
55
+ },
56
+ userIdUpdate: {
57
+ name: '最新變更使用者主鍵',
58
+ type: 'STRING',
59
+ },
60
+ timeUpdate: {
61
+ name: '更新時間',
62
+ type: 'STRING',
63
+ },
64
+ isActive: {
65
+ name: '是否有效',
66
+ type: 'STRING',
67
+ },
68
+ }
69
+
70
+ let funNew = (ndata = {}) => {
71
+ let o = dtmapping(ndata, keys(settings))
72
+ o.id = `${genIDSeq()}`
73
+ o.isAdmin = 'n'
74
+ o.userIdUpdate = o.userId
75
+ o.timeCreate = nowms2str()
76
+ o.userIdUpdate = o.userId
77
+ o.timeUpdate = o.timeCreate
78
+ o.isActive = 'y'
79
+ return o
80
+ }
81
+
82
+ let funTest = () => {
83
+ let rs = [
84
+
85
+ ['peter', '', `
86
+ {
87
+ '權限群組M1': {
88
+ 'mode': 'OR',
89
+ 'isActive': 'y',
90
+ }
91
+ }
92
+ `, 'n'],
93
+ ['mary', '', `
94
+ {
95
+ '權限群組M2': {
96
+ 'mode': 'OR',
97
+ 'isActive': 'y',
98
+ }
99
+ }
100
+ `, 'n'],
101
+ ['john', '', `
102
+ {
103
+ '權限群組M3': {
104
+ 'mode': 'OR',
105
+ 'isActive': 'y',
106
+ }
107
+ }
108
+ `, 'n'],
109
+ ['admin', '', `
110
+ {
111
+ '權限群組M4': {
112
+ 'mode': 'OR',
113
+ 'isActive': 'y',
114
+ }
115
+ }
116
+ `, 'y'],
117
+
118
+ ]
119
+ rs = map(rs, ([name, from, cgrups, isAdmin], k) => {
120
+ let v = funNew({
121
+ userId: 'id-for-admin',
122
+ order: k,
123
+ name,
124
+ email: `${name}@example.com`,
125
+ from,
126
+ cgrups,
127
+ isAdmin,
128
+ })
129
+ v.id = `id-for-${name}`
130
+ // if (name === 'john') {
131
+ // v.email = `${v.email};john@test.com`
132
+ // }
133
+ v.isAdmin = isAdmin
134
+ v = dtpick(v, keys(settings))
135
+ return v
136
+ })
137
+ console.log(`已產生: ${keyTable} 測試資料`, rs)
138
+ return rs
139
+ }
140
+
141
+ let tab = {
142
+ keyTable,
143
+ tableNameCht,
144
+ tableNameEng,
145
+ settings,
146
+ funNew,
147
+ funTest,
148
+ }
149
+
150
+
151
+ export default tab
152
+
@@ -1 +0,0 @@
1
- .bg-gray-100[data-v-f9ffef80]{--tw-bg-opacity:1;background-color:rgb(243 244 246/var(--tw-bg-opacity,1))}.bg-gray-50[data-v-f9ffef80]{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.bg-white[data-v-f9ffef80]{--tw-bg-opacity:1;background-color:rgb(255 255 255/var(--tw-bg-opacity,1))}.border[data-v-f9ffef80]{border-width:1px}.border-collapse[data-v-f9ffef80]{border-collapse:collapse}.border-solid[data-v-f9ffef80]{border-style:solid}.border-gray-200[data-v-f9ffef80]{--tw-border-opacity:1;border-color:rgb(229 231 235/var(--tw-border-opacity,1))}.border-gray-300[data-v-f9ffef80]{--tw-border-opacity:1;border-color:rgb(209 213 219/var(--tw-border-opacity,1))}.flex[data-v-f9ffef80]{display:-webkit-box;display:-ms-flexbox;display:flex}.focus\:ring-blue-500[data-v-f9ffef80]:focus{--tw-ring-opacity:1;--tw-ring-color:rgb(59 130 246/var(--tw-ring-opacity,1))}.font-medium[data-v-f9ffef80]{font-weight:500}.font-semibold[data-v-f9ffef80]{font-weight:600}.h-4[data-v-f9ffef80]{height:1rem}.hover\:bg-gray-50[data-v-f9ffef80]:hover{--tw-bg-opacity:1;background-color:rgb(249 250 251/var(--tw-bg-opacity,1))}.items-center[data-v-f9ffef80]{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.justify-end[data-v-f9ffef80]{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.mb-8[data-v-f9ffef80]{margin-bottom:2rem}.ml-2[data-v-f9ffef80]{margin-left:.5rem}.mr-2[data-v-f9ffef80]{margin-right:.5rem}.mt-2[data-v-f9ffef80]{margin-top:.5rem}.overflow-x-auto[data-v-f9ffef80]{overflow-x:auto}.p-5[data-v-f9ffef80]{padding:1.25rem}.pb-2[data-v-f9ffef80]{padding-bottom:.5rem}.px-2[data-v-f9ffef80]{padding-left:.5rem;padding-right:.5rem}.px-6[data-v-f9ffef80]{padding-left:1.5rem;padding-right:1.5rem}.py-1[data-v-f9ffef80]{padding-top:.25rem;padding-bottom:.25rem}.py-3[data-v-f9ffef80]{padding-top:.75rem;padding-bottom:.75rem}.py-4[data-v-f9ffef80]{padding-top:1rem;padding-bottom:1rem}.relative[data-v-f9ffef80]{position:relative}.rounded[data-v-f9ffef80]{border-radius:.25rem}.rounded-lg[data-v-f9ffef80]{border-radius:.5rem}.shadow-md[data-v-f9ffef80]{--tw-shadow:0 4px 6px -1px rgba(0,0,0,.1),0 2px 4px -2px rgba(0,0,0,.1);--tw-shadow-colored:0 4px 6px -1px var(--tw-shadow-color),0 2px 4px -2px var(--tw-shadow-color);-webkit-box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow);box-shadow:var(--tw-ring-offset-shadow,0 0 #0000),var(--tw-ring-shadow,0 0 #0000),var(--tw-shadow)}.space-x-4[data-v-f9ffef80]>:not([hidden])~:not([hidden]){--tw-space-x-reverse:0;margin-right:calc(1rem*var(--tw-space-x-reverse));margin-left:calc(1rem*(1 - var(--tw-space-x-reverse)))}.space-y-8[data-v-f9ffef80]>:not([hidden])~:not([hidden]){--tw-space-y-reverse:0;margin-top:calc(2rem*(1 - var(--tw-space-y-reverse)));margin-bottom:calc(2rem*var(--tw-space-y-reverse))}.text-blue-600[data-v-f9ffef80]{--tw-text-opacity:1;color:rgb(37 99 235/var(--tw-text-opacity,1))}.text-gray-500[data-v-f9ffef80]{--tw-text-opacity:1;color:rgb(107 114 128/var(--tw-text-opacity,1))}.text-gray-700[data-v-f9ffef80]{--tw-text-opacity:1;color:rgb(55 65 81/var(--tw-text-opacity,1))}.text-gray-900[data-v-f9ffef80]{--tw-text-opacity:1;color:rgb(17 24 39/var(--tw-text-opacity,1))}.text-left[data-v-f9ffef80]{text-align:left}.text-lg[data-v-f9ffef80]{font-size:1.125rem;line-height:1.75rem}.text-purple-600[data-v-f9ffef80]{--tw-text-opacity:1;color:rgb(147 51 234/var(--tw-text-opacity,1))}.text-sm[data-v-f9ffef80]{font-size:.875rem;line-height:1.25rem}.text-xs[data-v-f9ffef80]{font-size:.75rem;line-height:1rem}.transition-colors[data-v-f9ffef80]{-webkit-transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;-webkit-transition-timing-function:cubic-bezier(.4,0,.2,1);transition-timing-function:cubic-bezier(.4,0,.2,1);-webkit-transition-duration:.15s;transition-duration:.15s}.w-4[data-v-f9ffef80]{width:1rem}.w-full[data-v-f9ffef80]{width:100%}.staCtrl[data-v-f9ffef80]{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;gap:12px;padding:8px 0}.staCtrlRight[data-v-f9ffef80],.staCtrl[data-v-f9ffef80]{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.staCtrlRight[data-v-f9ffef80]{-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:16px}body,html{font-family:微軟正黑體,Microsoft JhengHei,MicrosoftJhengHeiRegular,Avenir,Helvetica,Arial,sans-serif;overflow-y:hidden}a,button,div,input,p,pre,span,textarea{font-family:inherit}.fade-enter-active{-webkit-animation:go 1s;animation:go 1s}.fade-leave-active{-webkit-animation:back 1s;animation:back 1s}@-webkit-keyframes go{0%{opacity:0}to{opacity:1}}@keyframes go{0%{opacity:0}to{opacity:1}}@-webkit-keyframes back{0%{opacity:1}to{opacity:0}}@keyframes back{0%{opacity:1}to{opacity:0}}