@tomei/sso 0.60.4 → 0.61.0

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 (677) hide show
  1. package/.commitlintrc.json +22 -22
  2. package/.gitlab-ci.yml +16 -16
  3. package/.husky/commit-msg +15 -15
  4. package/.husky/pre-commit +7 -7
  5. package/.prettierrc +4 -4
  6. package/Jenkinsfile +57 -57
  7. package/README.md +23 -23
  8. package/__tests__/unit/components/group/group.spec.ts +79 -79
  9. package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
  10. package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
  11. package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
  12. package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
  13. package/__tests__/unit/components/login-user/l.spec.ts +746 -746
  14. package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
  15. package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
  16. package/__tests__/unit/components/system/system.spec.ts +254 -254
  17. package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
  18. package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
  19. package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
  20. package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
  21. package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
  22. package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
  23. package/__tests__/unit/session/session.service.spec.ts +47 -47
  24. package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
  25. package/coverage/clover.xml +1452 -1452
  26. package/coverage/coverage-final.json +47 -47
  27. package/coverage/lcov-report/base.css +224 -224
  28. package/coverage/lcov-report/block-navigation.js +87 -87
  29. package/coverage/lcov-report/components/group/group.repository.ts.html +117 -117
  30. package/coverage/lcov-report/components/group/group.ts.html +327 -327
  31. package/coverage/lcov-report/components/group/index.html +130 -130
  32. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +117 -117
  33. package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +321 -321
  34. package/coverage/lcov-report/components/group-object-privilege/index.html +130 -130
  35. package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +117 -117
  36. package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +303 -303
  37. package/coverage/lcov-report/components/group-privilege/index.html +130 -130
  38. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +117 -117
  39. package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +327 -327
  40. package/coverage/lcov-report/components/group-reporting-user/index.html +130 -130
  41. package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +117 -117
  42. package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +309 -309
  43. package/coverage/lcov-report/components/group-system-access/index.html +130 -130
  44. package/coverage/lcov-report/components/login-history/index.html +115 -115
  45. package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +117 -117
  46. package/coverage/lcov-report/components/login-user/index.html +130 -130
  47. package/coverage/lcov-report/components/login-user/login-user.ts.html +5007 -5007
  48. package/coverage/lcov-report/components/login-user/user.repository.ts.html +117 -117
  49. package/coverage/lcov-report/components/password-hash/index.html +115 -115
  50. package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +126 -126
  51. package/coverage/lcov-report/components/system/index.html +130 -130
  52. package/coverage/lcov-report/components/system/system.repository.ts.html +117 -117
  53. package/coverage/lcov-report/components/system/system.ts.html +909 -909
  54. package/coverage/lcov-report/components/system-privilege/index.html +130 -130
  55. package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +120 -120
  56. package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +390 -390
  57. package/coverage/lcov-report/components/user-group/index.html +130 -130
  58. package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +117 -117
  59. package/coverage/lcov-report/components/user-group/user-group.ts.html +354 -354
  60. package/coverage/lcov-report/components/user-object-privilege/index.html +130 -130
  61. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +117 -117
  62. package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +312 -312
  63. package/coverage/lcov-report/components/user-privilege/index.html +130 -130
  64. package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +117 -117
  65. package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +306 -306
  66. package/coverage/lcov-report/components/user-system-access/index.html +130 -130
  67. package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +117 -117
  68. package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +312 -312
  69. package/coverage/lcov-report/enum/group-type.enum.ts.html +108 -108
  70. package/coverage/lcov-report/enum/index.html +160 -160
  71. package/coverage/lcov-report/enum/index.ts.html +93 -93
  72. package/coverage/lcov-report/enum/user-status.enum.ts.html +105 -105
  73. package/coverage/lcov-report/enum/yn.enum.ts.html +96 -96
  74. package/coverage/lcov-report/index.html +370 -370
  75. package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +333 -333
  76. package/coverage/lcov-report/models/group-privilege.entity.ts.html +315 -315
  77. package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +339 -339
  78. package/coverage/lcov-report/models/group-system-access.entity.ts.html +324 -324
  79. package/coverage/lcov-report/models/group.entity.ts.html +435 -435
  80. package/coverage/lcov-report/models/index.html +310 -310
  81. package/coverage/lcov-report/models/login-history.entity.ts.html +252 -252
  82. package/coverage/lcov-report/models/staff.entity.ts.html +411 -411
  83. package/coverage/lcov-report/models/system-privilege.entity.ts.html +354 -354
  84. package/coverage/lcov-report/models/system.entity.ts.html +423 -423
  85. package/coverage/lcov-report/models/user-group.entity.ts.html +354 -354
  86. package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +330 -330
  87. package/coverage/lcov-report/models/user-privilege.entity.ts.html +315 -315
  88. package/coverage/lcov-report/models/user-system-access.entity.ts.html +315 -315
  89. package/coverage/lcov-report/models/user.entity.ts.html +522 -522
  90. package/coverage/lcov-report/prettify.css +1 -1
  91. package/coverage/lcov-report/prettify.js +2 -2
  92. package/coverage/lcov-report/redis-client/index.html +115 -115
  93. package/coverage/lcov-report/redis-client/redis.service.ts.html +240 -240
  94. package/coverage/lcov-report/session/index.html +115 -115
  95. package/coverage/lcov-report/session/session.service.ts.html +246 -246
  96. package/coverage/lcov-report/sorter.js +196 -196
  97. package/coverage/lcov.info +2490 -2490
  98. package/coverage/test-report.xml +128 -128
  99. package/create-sso-user.sql +39 -39
  100. package/dist/src/components/login-user/user.js +8 -0
  101. package/dist/src/components/login-user/user.js.map +1 -1
  102. package/dist/tsconfig.tsbuildinfo +1 -1
  103. package/eslint.config.mjs +58 -58
  104. package/jest.config.js +14 -14
  105. package/migrations/20240314080602-create-user-table.js +124 -124
  106. package/migrations/20240314080603-create-user-group-table.js +85 -85
  107. package/migrations/20240314080604-create-user-user-group-table.js +55 -55
  108. package/migrations/20240314080605-create-login-history-table.js +53 -53
  109. package/migrations/20240527064925-create-system-table.js +78 -78
  110. package/migrations/20240527064926-create-system-privilege-table.js +71 -71
  111. package/migrations/20240527065342-create-group-table.js +93 -93
  112. package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
  113. package/migrations/20240528011551-create-group-system-access-table.js +72 -72
  114. package/migrations/20240528023018-user-system-access-table.js +75 -75
  115. package/migrations/20240528032229-user-privilege-table.js +76 -76
  116. package/migrations/20240528063003-create-group-privilege-table.js +76 -76
  117. package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
  118. package/migrations/20240528063107-create-user-object-privilege-table.js +84 -84
  119. package/migrations/20240528063108-create-api-key-table.js +85 -85
  120. package/migrations/20241104104802-create-building-table.js +95 -95
  121. package/migrations/20250108091132-add-area-manager-user-id-to-building-table.js +14 -14
  122. package/migrations/20250108091133-add-passcode-to-user-table.js +36 -36
  123. package/migrations/20250210115636-create-user-reporting-hierarchy.js +76 -76
  124. package/migrations/20250326043818-crate-user-password-history.js +42 -42
  125. package/package.json +90 -90
  126. package/sampledotenv +7 -7
  127. package/sonar-project.properties +22 -22
  128. package/src/components/api-key/api-key.repository.ts +15 -15
  129. package/src/components/api-key/api-key.ts +448 -448
  130. package/src/components/api-key/index.ts +4 -4
  131. package/src/components/building/building.repository.ts +27 -27
  132. package/src/components/building/index.ts +2 -2
  133. package/src/components/group/group.repository.ts +26 -26
  134. package/src/components/group/group.ts +2284 -2284
  135. package/src/components/group/index.ts +3 -3
  136. package/src/components/group-object-privilege/group-object-privilege.repository.ts +25 -25
  137. package/src/components/group-object-privilege/group-object-privilege.ts +278 -278
  138. package/src/components/group-object-privilege/index.ts +2 -2
  139. package/src/components/group-privilege/group-privilege.repository.ts +29 -29
  140. package/src/components/group-privilege/group-privilege.ts +84 -84
  141. package/src/components/group-privilege/index.ts +2 -2
  142. package/src/components/group-reporting-user/group-reporting-user.repository.ts +23 -23
  143. package/src/components/group-reporting-user/group-reporting-user.ts +506 -506
  144. package/src/components/group-reporting-user/index.ts +3 -3
  145. package/src/components/group-system-access/group-system-access.repository.ts +43 -43
  146. package/src/components/group-system-access/group-system-access.ts +90 -90
  147. package/src/components/group-system-access/index.ts +2 -2
  148. package/src/components/index.ts +20 -20
  149. package/src/components/login-history/index.ts +1 -1
  150. package/src/components/login-history/login-history.repository.ts +11 -11
  151. package/src/components/login-user/index.ts +5 -5
  152. package/src/components/login-user/interfaces/check-user-info-duplicated.interface.ts +7 -7
  153. package/src/components/login-user/interfaces/index.ts +1 -1
  154. package/src/components/login-user/interfaces/system-access.interface.ts +13 -13
  155. package/src/components/login-user/interfaces/user-info.interface.ts +34 -34
  156. package/src/components/login-user/login-user.ts +362 -362
  157. package/src/components/login-user/user.repository.ts +11 -11
  158. package/src/components/login-user/user.ts +3142 -3134
  159. package/src/components/password-hash/index.ts +2 -2
  160. package/src/components/password-hash/interfaces/index.ts +1 -1
  161. package/src/components/password-hash/interfaces/password-hash-service.interface.ts +4 -4
  162. package/src/components/password-hash/password-hash.service.ts +14 -14
  163. package/src/components/staff/index.ts +2 -2
  164. package/src/components/staff/staff.repository.ts +27 -27
  165. package/src/components/system/index.ts +3 -3
  166. package/src/components/system/system.repository.ts +11 -11
  167. package/src/components/system/system.ts +456 -456
  168. package/src/components/system-privilege/index.ts +4 -4
  169. package/src/components/system-privilege/system-privilege.repository.ts +18 -18
  170. package/src/components/system-privilege/system-privilege.ts +541 -541
  171. package/src/components/user-group/index.ts +2 -2
  172. package/src/components/user-group/user-group.repository.ts +19 -19
  173. package/src/components/user-group/user-group.ts +764 -764
  174. package/src/components/user-object-privilege/index.ts +2 -2
  175. package/src/components/user-object-privilege/user-object-privilege.repository.ts +11 -11
  176. package/src/components/user-object-privilege/user-object-privilege.ts +79 -79
  177. package/src/components/user-password-history/index.ts +2 -2
  178. package/src/components/user-password-history/user-password-history.repository.ts +39 -39
  179. package/src/components/user-password-history/user-password-history.ts +187 -187
  180. package/src/components/user-privilege/index.ts +2 -2
  181. package/src/components/user-privilege/user-privilege.repository.ts +25 -25
  182. package/src/components/user-privilege/user-privilege.ts +662 -662
  183. package/src/components/user-reporting-hierarchy/index.ts +2 -2
  184. package/src/components/user-reporting-hierarchy/user-reporting-hierarchy.repository.ts +30 -30
  185. package/src/components/user-reporting-hierarchy/user-reporting-hierarchy.ts +505 -505
  186. package/src/components/user-system-access/index.ts +2 -2
  187. package/src/components/user-system-access/user-system-access.repository.ts +41 -41
  188. package/src/components/user-system-access/user-system-access.ts +717 -717
  189. package/src/database.ts +15 -15
  190. package/src/enum/api-key.enum.ts +5 -5
  191. package/src/enum/building-type.enum.ts +6 -6
  192. package/src/enum/group-type.enum.ts +8 -8
  193. package/src/enum/index.ts +6 -6
  194. package/src/enum/login-status.enum.ts +4 -4
  195. package/src/enum/object-status.enum.ts +4 -4
  196. package/src/enum/user-status.enum.ts +7 -7
  197. package/src/enum/yn.enum.ts +4 -4
  198. package/src/index.ts +8 -8
  199. package/src/interfaces/api-key-attr.interface.ts +16 -16
  200. package/src/interfaces/group-object-privilege.interface.ts +14 -14
  201. package/src/interfaces/group-privilege.interface.ts +10 -10
  202. package/src/interfaces/group-reporting-user.interface.ts +11 -11
  203. package/src/interfaces/group-search-attr.interface.ts +9 -9
  204. package/src/interfaces/group-system-access.interface.ts +10 -10
  205. package/src/interfaces/group.interface.ts +17 -17
  206. package/src/interfaces/index.ts +13 -13
  207. package/src/interfaces/system-login.interface.ts +6 -6
  208. package/src/interfaces/system-privilege-search.interface.ts +5 -5
  209. package/src/interfaces/system-privilege.interface.ts +11 -11
  210. package/src/interfaces/system-search-attr.interface.ts +5 -5
  211. package/src/interfaces/system.interface.ts +15 -15
  212. package/src/interfaces/user-group.interface.ts +12 -12
  213. package/src/interfaces/user-object-privilege.interface.ts +14 -14
  214. package/src/interfaces/user-password-history.interface.ts +6 -6
  215. package/src/interfaces/user-privilege.interface.ts +10 -10
  216. package/src/interfaces/user-reporting-hierarchy.interface.ts +11 -11
  217. package/src/interfaces/user-session.interface.ts +5 -5
  218. package/src/interfaces/user-system-access.interface.ts +10 -10
  219. package/src/models/api-key-entity.ts +101 -101
  220. package/src/models/building.entity.ts +103 -103
  221. package/src/models/group-object-privilege.entity.ts +91 -91
  222. package/src/models/group-privilege.entity.ts +78 -78
  223. package/src/models/group-reporting-user.entity.ts +95 -95
  224. package/src/models/group-system-access.entity.ts +81 -81
  225. package/src/models/group.entity.ts +127 -127
  226. package/src/models/login-history.entity.ts +63 -63
  227. package/src/models/staff.entity.ts +91 -91
  228. package/src/models/system-privilege.entity.ts +90 -90
  229. package/src/models/system.entity.ts +113 -113
  230. package/src/models/user-group.entity.ts +91 -91
  231. package/src/models/user-object-privilege.entity.ts +90 -90
  232. package/src/models/user-password-history.ts +51 -51
  233. package/src/models/user-privilege.entity.ts +78 -78
  234. package/src/models/user-reporting-hierarchy.entity.ts +102 -102
  235. package/src/models/user-system-access.entity.ts +87 -87
  236. package/src/models/user.entity.ts +193 -193
  237. package/src/redis-client/__mocks__/jest-initial-setup.ts +2 -2
  238. package/src/redis-client/__mocks__/redis-mock.ts +28 -28
  239. package/src/redis-client/index.ts +1 -1
  240. package/src/redis-client/redis.service.ts +75 -75
  241. package/src/session/index.ts +2 -2
  242. package/src/session/interfaces/index.ts +1 -1
  243. package/src/session/interfaces/session-service.interface.ts +26 -26
  244. package/src/session/session.service.ts +96 -96
  245. package/src/types/auth-context.ts +10 -10
  246. package/src/types/index.ts +1 -1
  247. package/tsconfig.build.json +5 -5
  248. package/tsconfig.json +23 -23
  249. package/dist/components/api-key/api-key.d.ts +0 -85
  250. package/dist/components/api-key/api-key.d.ts.map +0 -1
  251. package/dist/components/api-key/api-key.js +0 -245
  252. package/dist/components/api-key/api-key.js.map +0 -1
  253. package/dist/components/api-key/api-key.repository.d.ts +0 -7
  254. package/dist/components/api-key/api-key.repository.d.ts.map +0 -1
  255. package/dist/components/api-key/api-key.repository.js +0 -18
  256. package/dist/components/api-key/api-key.repository.js.map +0 -1
  257. package/dist/components/api-key/index.d.ts +0 -4
  258. package/dist/components/api-key/index.d.ts.map +0 -1
  259. package/dist/components/api-key/index.js +0 -8
  260. package/dist/components/api-key/index.js.map +0 -1
  261. package/dist/components/building/building.repository.d.ts +0 -7
  262. package/dist/components/building/building.repository.d.ts.map +0 -1
  263. package/dist/components/building/building.repository.js +0 -30
  264. package/dist/components/building/building.repository.js.map +0 -1
  265. package/dist/components/building/index.d.ts +0 -2
  266. package/dist/components/building/index.d.ts.map +0 -1
  267. package/dist/components/building/index.js +0 -18
  268. package/dist/components/building/index.js.map +0 -1
  269. package/dist/components/group/group.d.ts +0 -129
  270. package/dist/components/group/group.d.ts.map +0 -1
  271. package/dist/components/group/group.js +0 -1337
  272. package/dist/components/group/group.js.map +0 -1
  273. package/dist/components/group/group.repository.d.ts +0 -8
  274. package/dist/components/group/group.repository.d.ts.map +0 -1
  275. package/dist/components/group/group.repository.js +0 -29
  276. package/dist/components/group/group.repository.js.map +0 -1
  277. package/dist/components/group/index.d.ts +0 -3
  278. package/dist/components/group/index.d.ts.map +0 -1
  279. package/dist/components/group/index.js +0 -19
  280. package/dist/components/group/index.js.map +0 -1
  281. package/dist/components/group-object-privilege/group-object-privilege.d.ts +0 -28
  282. package/dist/components/group-object-privilege/group-object-privilege.d.ts.map +0 -1
  283. package/dist/components/group-object-privilege/group-object-privilege.js +0 -163
  284. package/dist/components/group-object-privilege/group-object-privilege.js.map +0 -1
  285. package/dist/components/group-object-privilege/group-object-privilege.repository.d.ts +0 -7
  286. package/dist/components/group-object-privilege/group-object-privilege.repository.d.ts.map +0 -1
  287. package/dist/components/group-object-privilege/group-object-privilege.repository.js +0 -26
  288. package/dist/components/group-object-privilege/group-object-privilege.repository.js.map +0 -1
  289. package/dist/components/group-object-privilege/index.d.ts +0 -3
  290. package/dist/components/group-object-privilege/index.d.ts.map +0 -1
  291. package/dist/components/group-object-privilege/index.js +0 -19
  292. package/dist/components/group-object-privilege/index.js.map +0 -1
  293. package/dist/components/group-privilege/group-privilege.d.ts +0 -25
  294. package/dist/components/group-privilege/group-privilege.d.ts.map +0 -1
  295. package/dist/components/group-privilege/group-privilege.js +0 -67
  296. package/dist/components/group-privilege/group-privilege.js.map +0 -1
  297. package/dist/components/group-privilege/group-privilege.repository.d.ts +0 -7
  298. package/dist/components/group-privilege/group-privilege.repository.d.ts.map +0 -1
  299. package/dist/components/group-privilege/group-privilege.repository.js +0 -28
  300. package/dist/components/group-privilege/group-privilege.repository.js.map +0 -1
  301. package/dist/components/group-privilege/index.d.ts +0 -3
  302. package/dist/components/group-privilege/index.d.ts.map +0 -1
  303. package/dist/components/group-privilege/index.js +0 -19
  304. package/dist/components/group-privilege/index.js.map +0 -1
  305. package/dist/components/group-reporting-user/group-reporting-user.d.ts +0 -30
  306. package/dist/components/group-reporting-user/group-reporting-user.d.ts.map +0 -1
  307. package/dist/components/group-reporting-user/group-reporting-user.js +0 -277
  308. package/dist/components/group-reporting-user/group-reporting-user.js.map +0 -1
  309. package/dist/components/group-reporting-user/group-reporting-user.repository.d.ts +0 -7
  310. package/dist/components/group-reporting-user/group-reporting-user.repository.d.ts.map +0 -1
  311. package/dist/components/group-reporting-user/group-reporting-user.repository.js +0 -23
  312. package/dist/components/group-reporting-user/group-reporting-user.repository.js.map +0 -1
  313. package/dist/components/group-reporting-user/index.d.ts +0 -3
  314. package/dist/components/group-reporting-user/index.d.ts.map +0 -1
  315. package/dist/components/group-reporting-user/index.js +0 -19
  316. package/dist/components/group-reporting-user/index.js.map +0 -1
  317. package/dist/components/group-system-access/group-system-access.d.ts +0 -28
  318. package/dist/components/group-system-access/group-system-access.d.ts.map +0 -1
  319. package/dist/components/group-system-access/group-system-access.js +0 -70
  320. package/dist/components/group-system-access/group-system-access.js.map +0 -1
  321. package/dist/components/group-system-access/group-system-access.repository.d.ts +0 -8
  322. package/dist/components/group-system-access/group-system-access.repository.d.ts.map +0 -1
  323. package/dist/components/group-system-access/group-system-access.repository.js +0 -46
  324. package/dist/components/group-system-access/group-system-access.repository.js.map +0 -1
  325. package/dist/components/group-system-access/index.d.ts +0 -3
  326. package/dist/components/group-system-access/index.d.ts.map +0 -1
  327. package/dist/components/group-system-access/index.js +0 -19
  328. package/dist/components/group-system-access/index.js.map +0 -1
  329. package/dist/components/index.d.ts +0 -18
  330. package/dist/components/index.d.ts.map +0 -1
  331. package/dist/components/index.js +0 -34
  332. package/dist/components/index.js.map +0 -1
  333. package/dist/components/login-history/index.d.ts +0 -2
  334. package/dist/components/login-history/index.d.ts.map +0 -1
  335. package/dist/components/login-history/index.js +0 -18
  336. package/dist/components/login-history/index.js.map +0 -1
  337. package/dist/components/login-history/login-history.repository.d.ts +0 -6
  338. package/dist/components/login-history/login-history.repository.d.ts.map +0 -1
  339. package/dist/components/login-history/login-history.repository.js +0 -15
  340. package/dist/components/login-history/login-history.repository.js.map +0 -1
  341. package/dist/components/login-user/index.d.ts +0 -5
  342. package/dist/components/login-user/index.d.ts.map +0 -1
  343. package/dist/components/login-user/index.js +0 -21
  344. package/dist/components/login-user/index.js.map +0 -1
  345. package/dist/components/login-user/interfaces/check-user-info-duplicated.interface.d.ts +0 -8
  346. package/dist/components/login-user/interfaces/check-user-info-duplicated.interface.d.ts.map +0 -1
  347. package/dist/components/login-user/interfaces/check-user-info-duplicated.interface.js +0 -3
  348. package/dist/components/login-user/interfaces/check-user-info-duplicated.interface.js.map +0 -1
  349. package/dist/components/login-user/interfaces/index.d.ts +0 -2
  350. package/dist/components/login-user/interfaces/index.d.ts.map +0 -1
  351. package/dist/components/login-user/interfaces/index.js +0 -18
  352. package/dist/components/login-user/interfaces/index.js.map +0 -1
  353. package/dist/components/login-user/interfaces/system-access.interface.d.ts +0 -14
  354. package/dist/components/login-user/interfaces/system-access.interface.d.ts.map +0 -1
  355. package/dist/components/login-user/interfaces/system-access.interface.js +0 -3
  356. package/dist/components/login-user/interfaces/system-access.interface.js.map +0 -1
  357. package/dist/components/login-user/interfaces/user-info.interface.d.ts +0 -31
  358. package/dist/components/login-user/interfaces/user-info.interface.d.ts.map +0 -1
  359. package/dist/components/login-user/interfaces/user-info.interface.js +0 -3
  360. package/dist/components/login-user/interfaces/user-info.interface.js.map +0 -1
  361. package/dist/components/login-user/login-user.d.ts +0 -14
  362. package/dist/components/login-user/login-user.d.ts.map +0 -1
  363. package/dist/components/login-user/login-user.js +0 -127
  364. package/dist/components/login-user/login-user.js.map +0 -1
  365. package/dist/components/login-user/user.d.ts +0 -155
  366. package/dist/components/login-user/user.d.ts.map +0 -1
  367. package/dist/components/login-user/user.js +0 -1753
  368. package/dist/components/login-user/user.js.map +0 -1
  369. package/dist/components/login-user/user.repository.d.ts +0 -6
  370. package/dist/components/login-user/user.repository.d.ts.map +0 -1
  371. package/dist/components/login-user/user.repository.js +0 -15
  372. package/dist/components/login-user/user.repository.js.map +0 -1
  373. package/dist/components/password-hash/index.d.ts +0 -3
  374. package/dist/components/password-hash/index.d.ts.map +0 -1
  375. package/dist/components/password-hash/index.js +0 -19
  376. package/dist/components/password-hash/index.js.map +0 -1
  377. package/dist/components/password-hash/interfaces/index.d.ts +0 -2
  378. package/dist/components/password-hash/interfaces/index.d.ts.map +0 -1
  379. package/dist/components/password-hash/interfaces/index.js +0 -18
  380. package/dist/components/password-hash/interfaces/index.js.map +0 -1
  381. package/dist/components/password-hash/interfaces/password-hash-service.interface.d.ts +0 -5
  382. package/dist/components/password-hash/interfaces/password-hash-service.interface.d.ts.map +0 -1
  383. package/dist/components/password-hash/interfaces/password-hash-service.interface.js +0 -3
  384. package/dist/components/password-hash/interfaces/password-hash-service.interface.js.map +0 -1
  385. package/dist/components/password-hash/password-hash.service.d.ts +0 -7
  386. package/dist/components/password-hash/password-hash.service.d.ts.map +0 -1
  387. package/dist/components/password-hash/password-hash.service.js +0 -48
  388. package/dist/components/password-hash/password-hash.service.js.map +0 -1
  389. package/dist/components/staff/index.d.ts +0 -2
  390. package/dist/components/staff/index.d.ts.map +0 -1
  391. package/dist/components/staff/index.js +0 -18
  392. package/dist/components/staff/index.js.map +0 -1
  393. package/dist/components/staff/staff.repository.d.ts +0 -7
  394. package/dist/components/staff/staff.repository.d.ts.map +0 -1
  395. package/dist/components/staff/staff.repository.js +0 -30
  396. package/dist/components/staff/staff.repository.js.map +0 -1
  397. package/dist/components/system/index.d.ts +0 -3
  398. package/dist/components/system/index.d.ts.map +0 -1
  399. package/dist/components/system/index.js +0 -19
  400. package/dist/components/system/index.js.map +0 -1
  401. package/dist/components/system/system.d.ts +0 -40
  402. package/dist/components/system/system.d.ts.map +0 -1
  403. package/dist/components/system/system.js +0 -283
  404. package/dist/components/system/system.js.map +0 -1
  405. package/dist/components/system/system.repository.d.ts +0 -6
  406. package/dist/components/system/system.repository.d.ts.map +0 -1
  407. package/dist/components/system/system.repository.js +0 -15
  408. package/dist/components/system/system.repository.js.map +0 -1
  409. package/dist/components/system-privilege/index.d.ts +0 -4
  410. package/dist/components/system-privilege/index.d.ts.map +0 -1
  411. package/dist/components/system-privilege/index.js +0 -8
  412. package/dist/components/system-privilege/index.js.map +0 -1
  413. package/dist/components/system-privilege/system-privilege.d.ts +0 -53
  414. package/dist/components/system-privilege/system-privilege.d.ts.map +0 -1
  415. package/dist/components/system-privilege/system-privilege.js +0 -315
  416. package/dist/components/system-privilege/system-privilege.js.map +0 -1
  417. package/dist/components/system-privilege/system-privilege.repository.d.ts +0 -7
  418. package/dist/components/system-privilege/system-privilege.repository.d.ts.map +0 -1
  419. package/dist/components/system-privilege/system-privilege.repository.js +0 -21
  420. package/dist/components/system-privilege/system-privilege.repository.js.map +0 -1
  421. package/dist/components/user-group/index.d.ts +0 -3
  422. package/dist/components/user-group/index.d.ts.map +0 -1
  423. package/dist/components/user-group/index.js +0 -19
  424. package/dist/components/user-group/index.js.map +0 -1
  425. package/dist/components/user-group/user-group.d.ts +0 -51
  426. package/dist/components/user-group/user-group.d.ts.map +0 -1
  427. package/dist/components/user-group/user-group.js +0 -335
  428. package/dist/components/user-group/user-group.js.map +0 -1
  429. package/dist/components/user-group/user-group.repository.d.ts +0 -6
  430. package/dist/components/user-group/user-group.repository.d.ts.map +0 -1
  431. package/dist/components/user-group/user-group.repository.js +0 -15
  432. package/dist/components/user-group/user-group.repository.js.map +0 -1
  433. package/dist/components/user-object-privilege/index.d.ts +0 -3
  434. package/dist/components/user-object-privilege/index.d.ts.map +0 -1
  435. package/dist/components/user-object-privilege/index.js +0 -19
  436. package/dist/components/user-object-privilege/index.js.map +0 -1
  437. package/dist/components/user-object-privilege/user-object-privilege.d.ts +0 -24
  438. package/dist/components/user-object-privilege/user-object-privilege.d.ts.map +0 -1
  439. package/dist/components/user-object-privilege/user-object-privilege.js +0 -59
  440. package/dist/components/user-object-privilege/user-object-privilege.js.map +0 -1
  441. package/dist/components/user-object-privilege/user-object-privilege.repository.d.ts +0 -6
  442. package/dist/components/user-object-privilege/user-object-privilege.repository.d.ts.map +0 -1
  443. package/dist/components/user-object-privilege/user-object-privilege.repository.js +0 -15
  444. package/dist/components/user-object-privilege/user-object-privilege.repository.js.map +0 -1
  445. package/dist/components/user-privilege/index.d.ts +0 -3
  446. package/dist/components/user-privilege/index.d.ts.map +0 -1
  447. package/dist/components/user-privilege/index.js +0 -19
  448. package/dist/components/user-privilege/index.js.map +0 -1
  449. package/dist/components/user-privilege/user-privilege.d.ts +0 -71
  450. package/dist/components/user-privilege/user-privilege.d.ts.map +0 -1
  451. package/dist/components/user-privilege/user-privilege.js +0 -388
  452. package/dist/components/user-privilege/user-privilege.js.map +0 -1
  453. package/dist/components/user-privilege/user-privilege.repository.d.ts +0 -7
  454. package/dist/components/user-privilege/user-privilege.repository.d.ts.map +0 -1
  455. package/dist/components/user-privilege/user-privilege.repository.js +0 -29
  456. package/dist/components/user-privilege/user-privilege.repository.js.map +0 -1
  457. package/dist/components/user-system-access/index.d.ts +0 -3
  458. package/dist/components/user-system-access/index.d.ts.map +0 -1
  459. package/dist/components/user-system-access/index.js +0 -19
  460. package/dist/components/user-system-access/index.js.map +0 -1
  461. package/dist/components/user-system-access/user-system-access.d.ts +0 -69
  462. package/dist/components/user-system-access/user-system-access.d.ts.map +0 -1
  463. package/dist/components/user-system-access/user-system-access.js +0 -413
  464. package/dist/components/user-system-access/user-system-access.js.map +0 -1
  465. package/dist/components/user-system-access/user-system-access.repository.d.ts +0 -8
  466. package/dist/components/user-system-access/user-system-access.repository.d.ts.map +0 -1
  467. package/dist/components/user-system-access/user-system-access.repository.js +0 -44
  468. package/dist/components/user-system-access/user-system-access.repository.js.map +0 -1
  469. package/dist/database.d.ts +0 -5
  470. package/dist/database.d.ts.map +0 -1
  471. package/dist/database.js +0 -14
  472. package/dist/database.js.map +0 -1
  473. package/dist/enum/api-key.enum.d.ts +0 -6
  474. package/dist/enum/api-key.enum.d.ts.map +0 -1
  475. package/dist/enum/api-key.enum.js +0 -10
  476. package/dist/enum/api-key.enum.js.map +0 -1
  477. package/dist/enum/group-type.enum.d.ts +0 -9
  478. package/dist/enum/group-type.enum.d.ts.map +0 -1
  479. package/dist/enum/group-type.enum.js +0 -13
  480. package/dist/enum/group-type.enum.js.map +0 -1
  481. package/dist/enum/index.d.ts +0 -7
  482. package/dist/enum/index.d.ts.map +0 -1
  483. package/dist/enum/index.js +0 -23
  484. package/dist/enum/index.js.map +0 -1
  485. package/dist/enum/login-status.enum.d.ts +0 -5
  486. package/dist/enum/login-status.enum.d.ts.map +0 -1
  487. package/dist/enum/login-status.enum.js +0 -9
  488. package/dist/enum/login-status.enum.js.map +0 -1
  489. package/dist/enum/object-status.enum.d.ts +0 -5
  490. package/dist/enum/object-status.enum.d.ts.map +0 -1
  491. package/dist/enum/object-status.enum.js +0 -9
  492. package/dist/enum/object-status.enum.js.map +0 -1
  493. package/dist/enum/user-status.enum.d.ts +0 -8
  494. package/dist/enum/user-status.enum.d.ts.map +0 -1
  495. package/dist/enum/user-status.enum.js +0 -12
  496. package/dist/enum/user-status.enum.js.map +0 -1
  497. package/dist/enum/yn.enum.d.ts +0 -5
  498. package/dist/enum/yn.enum.d.ts.map +0 -1
  499. package/dist/enum/yn.enum.js +0 -9
  500. package/dist/enum/yn.enum.js.map +0 -1
  501. package/dist/index.d.ts.map +0 -1
  502. package/dist/interfaces/api-key-attr.interface.d.ts +0 -16
  503. package/dist/interfaces/api-key-attr.interface.d.ts.map +0 -1
  504. package/dist/interfaces/api-key-attr.interface.js +0 -3
  505. package/dist/interfaces/api-key-attr.interface.js.map +0 -1
  506. package/dist/interfaces/group-object-privilege.interface.d.ts +0 -14
  507. package/dist/interfaces/group-object-privilege.interface.d.ts.map +0 -1
  508. package/dist/interfaces/group-object-privilege.interface.js +0 -3
  509. package/dist/interfaces/group-object-privilege.interface.js.map +0 -1
  510. package/dist/interfaces/group-privilege.interface.d.ts +0 -11
  511. package/dist/interfaces/group-privilege.interface.d.ts.map +0 -1
  512. package/dist/interfaces/group-privilege.interface.js +0 -3
  513. package/dist/interfaces/group-privilege.interface.js.map +0 -1
  514. package/dist/interfaces/group-reporting-user.interface.d.ts +0 -12
  515. package/dist/interfaces/group-reporting-user.interface.d.ts.map +0 -1
  516. package/dist/interfaces/group-reporting-user.interface.js +0 -3
  517. package/dist/interfaces/group-reporting-user.interface.js.map +0 -1
  518. package/dist/interfaces/group-search-attr.interface.d.ts +0 -9
  519. package/dist/interfaces/group-search-attr.interface.d.ts.map +0 -1
  520. package/dist/interfaces/group-search-attr.interface.js +0 -3
  521. package/dist/interfaces/group-search-attr.interface.js.map +0 -1
  522. package/dist/interfaces/group-system-access.interface.d.ts +0 -11
  523. package/dist/interfaces/group-system-access.interface.d.ts.map +0 -1
  524. package/dist/interfaces/group-system-access.interface.js +0 -3
  525. package/dist/interfaces/group-system-access.interface.js.map +0 -1
  526. package/dist/interfaces/group.interface.d.ts +0 -17
  527. package/dist/interfaces/group.interface.d.ts.map +0 -1
  528. package/dist/interfaces/group.interface.js +0 -3
  529. package/dist/interfaces/group.interface.js.map +0 -1
  530. package/dist/interfaces/index.d.ts +0 -14
  531. package/dist/interfaces/index.d.ts.map +0 -1
  532. package/dist/interfaces/index.js +0 -30
  533. package/dist/interfaces/index.js.map +0 -1
  534. package/dist/interfaces/system-login.interface.d.ts +0 -7
  535. package/dist/interfaces/system-login.interface.d.ts.map +0 -1
  536. package/dist/interfaces/system-login.interface.js +0 -3
  537. package/dist/interfaces/system-login.interface.js.map +0 -1
  538. package/dist/interfaces/system-privilege-search.interface.d.ts +0 -6
  539. package/dist/interfaces/system-privilege-search.interface.d.ts.map +0 -1
  540. package/dist/interfaces/system-privilege-search.interface.js +0 -3
  541. package/dist/interfaces/system-privilege-search.interface.js.map +0 -1
  542. package/dist/interfaces/system-privilege.interface.d.ts +0 -12
  543. package/dist/interfaces/system-privilege.interface.d.ts.map +0 -1
  544. package/dist/interfaces/system-privilege.interface.js +0 -3
  545. package/dist/interfaces/system-privilege.interface.js.map +0 -1
  546. package/dist/interfaces/system-search-attr.interface.d.ts +0 -6
  547. package/dist/interfaces/system-search-attr.interface.d.ts.map +0 -1
  548. package/dist/interfaces/system-search-attr.interface.js +0 -3
  549. package/dist/interfaces/system-search-attr.interface.js.map +0 -1
  550. package/dist/interfaces/system.interface.d.ts +0 -16
  551. package/dist/interfaces/system.interface.d.ts.map +0 -1
  552. package/dist/interfaces/system.interface.js +0 -3
  553. package/dist/interfaces/system.interface.js.map +0 -1
  554. package/dist/interfaces/user-group.interface.d.ts +0 -13
  555. package/dist/interfaces/user-group.interface.d.ts.map +0 -1
  556. package/dist/interfaces/user-group.interface.js +0 -3
  557. package/dist/interfaces/user-group.interface.js.map +0 -1
  558. package/dist/interfaces/user-object-privilege.interface.d.ts +0 -14
  559. package/dist/interfaces/user-object-privilege.interface.d.ts.map +0 -1
  560. package/dist/interfaces/user-object-privilege.interface.js +0 -3
  561. package/dist/interfaces/user-object-privilege.interface.js.map +0 -1
  562. package/dist/interfaces/user-privilege.interface.d.ts +0 -11
  563. package/dist/interfaces/user-privilege.interface.d.ts.map +0 -1
  564. package/dist/interfaces/user-privilege.interface.js +0 -3
  565. package/dist/interfaces/user-privilege.interface.js.map +0 -1
  566. package/dist/interfaces/user-session.interface.d.ts +0 -5
  567. package/dist/interfaces/user-session.interface.d.ts.map +0 -1
  568. package/dist/interfaces/user-session.interface.js +0 -3
  569. package/dist/interfaces/user-session.interface.js.map +0 -1
  570. package/dist/interfaces/user-system-access.interface.d.ts +0 -11
  571. package/dist/interfaces/user-system-access.interface.d.ts.map +0 -1
  572. package/dist/interfaces/user-system-access.interface.js +0 -3
  573. package/dist/interfaces/user-system-access.interface.js.map +0 -1
  574. package/dist/models/api-key-entity.d.ts +0 -22
  575. package/dist/models/api-key-entity.d.ts.map +0 -1
  576. package/dist/models/api-key-entity.js +0 -125
  577. package/dist/models/api-key-entity.js.map +0 -1
  578. package/dist/models/building.entity.d.ts +0 -30
  579. package/dist/models/building.entity.d.ts.map +0 -1
  580. package/dist/models/building.entity.js +0 -216
  581. package/dist/models/building.entity.js.map +0 -1
  582. package/dist/models/group-object-privilege.entity.d.ts +0 -22
  583. package/dist/models/group-object-privilege.entity.d.ts.map +0 -1
  584. package/dist/models/group-object-privilege.entity.js +0 -114
  585. package/dist/models/group-object-privilege.entity.js.map +0 -1
  586. package/dist/models/group-privilege.entity.d.ts +0 -19
  587. package/dist/models/group-privilege.entity.d.ts.map +0 -1
  588. package/dist/models/group-privilege.entity.js +0 -99
  589. package/dist/models/group-privilege.entity.js.map +0 -1
  590. package/dist/models/group-reporting-user.entity.d.ts +0 -18
  591. package/dist/models/group-reporting-user.entity.d.ts.map +0 -1
  592. package/dist/models/group-reporting-user.entity.js +0 -117
  593. package/dist/models/group-reporting-user.entity.js.map +0 -1
  594. package/dist/models/group-system-access.entity.d.ts +0 -19
  595. package/dist/models/group-system-access.entity.d.ts.map +0 -1
  596. package/dist/models/group-system-access.entity.js +0 -102
  597. package/dist/models/group-system-access.entity.js.map +0 -1
  598. package/dist/models/group.entity.d.ts +0 -33
  599. package/dist/models/group.entity.d.ts.map +0 -1
  600. package/dist/models/group.entity.js +0 -157
  601. package/dist/models/group.entity.js.map +0 -1
  602. package/dist/models/login-history.entity.d.ts +0 -15
  603. package/dist/models/login-history.entity.d.ts.map +0 -1
  604. package/dist/models/login-history.entity.js +0 -81
  605. package/dist/models/login-history.entity.js.map +0 -1
  606. package/dist/models/staff.entity.d.ts +0 -19
  607. package/dist/models/staff.entity.d.ts.map +0 -1
  608. package/dist/models/staff.entity.js +0 -113
  609. package/dist/models/staff.entity.js.map +0 -1
  610. package/dist/models/system-privilege.entity.d.ts +0 -19
  611. package/dist/models/system-privilege.entity.d.ts.map +0 -1
  612. package/dist/models/system-privilege.entity.js +0 -111
  613. package/dist/models/system-privilege.entity.js.map +0 -1
  614. package/dist/models/system.entity.d.ts +0 -26
  615. package/dist/models/system.entity.d.ts.map +0 -1
  616. package/dist/models/system.entity.js +0 -139
  617. package/dist/models/system.entity.js.map +0 -1
  618. package/dist/models/user-group.entity.d.ts +0 -20
  619. package/dist/models/user-group.entity.d.ts.map +0 -1
  620. package/dist/models/user-group.entity.js +0 -114
  621. package/dist/models/user-group.entity.js.map +0 -1
  622. package/dist/models/user-object-privilege.entity.d.ts +0 -21
  623. package/dist/models/user-object-privilege.entity.d.ts.map +0 -1
  624. package/dist/models/user-object-privilege.entity.js +0 -113
  625. package/dist/models/user-object-privilege.entity.js.map +0 -1
  626. package/dist/models/user-privilege.entity.d.ts +0 -18
  627. package/dist/models/user-privilege.entity.d.ts.map +0 -1
  628. package/dist/models/user-privilege.entity.js +0 -99
  629. package/dist/models/user-privilege.entity.js.map +0 -1
  630. package/dist/models/user-system-access.entity.d.ts +0 -18
  631. package/dist/models/user-system-access.entity.d.ts.map +0 -1
  632. package/dist/models/user-system-access.entity.js +0 -108
  633. package/dist/models/user-system-access.entity.js.map +0 -1
  634. package/dist/models/user.entity.d.ts +0 -41
  635. package/dist/models/user.entity.d.ts.map +0 -1
  636. package/dist/models/user.entity.js +0 -218
  637. package/dist/models/user.entity.js.map +0 -1
  638. package/dist/redis-client/__mocks__/jest-initial-setup.d.ts +0 -2
  639. package/dist/redis-client/__mocks__/jest-initial-setup.d.ts.map +0 -1
  640. package/dist/redis-client/__mocks__/jest-initial-setup.js +0 -8
  641. package/dist/redis-client/__mocks__/jest-initial-setup.js.map +0 -1
  642. package/dist/redis-client/__mocks__/redis-mock.d.ts +0 -3
  643. package/dist/redis-client/__mocks__/redis-mock.d.ts.map +0 -1
  644. package/dist/redis-client/__mocks__/redis-mock.js +0 -56
  645. package/dist/redis-client/__mocks__/redis-mock.js.map +0 -1
  646. package/dist/redis-client/index.d.ts +0 -2
  647. package/dist/redis-client/index.d.ts.map +0 -1
  648. package/dist/redis-client/index.js +0 -18
  649. package/dist/redis-client/index.js.map +0 -1
  650. package/dist/redis-client/redis.service.d.ts +0 -10
  651. package/dist/redis-client/redis.service.d.ts.map +0 -1
  652. package/dist/redis-client/redis.service.js +0 -69
  653. package/dist/redis-client/redis.service.js.map +0 -1
  654. package/dist/session/index.d.ts +0 -3
  655. package/dist/session/index.d.ts.map +0 -1
  656. package/dist/session/index.js +0 -19
  657. package/dist/session/index.js.map +0 -1
  658. package/dist/session/interfaces/index.d.ts +0 -2
  659. package/dist/session/interfaces/index.d.ts.map +0 -1
  660. package/dist/session/interfaces/index.js +0 -18
  661. package/dist/session/interfaces/index.js.map +0 -1
  662. package/dist/session/interfaces/session-service.interface.d.ts +0 -10
  663. package/dist/session/interfaces/session-service.interface.d.ts.map +0 -1
  664. package/dist/session/interfaces/session-service.interface.js +0 -3
  665. package/dist/session/interfaces/session-service.interface.js.map +0 -1
  666. package/dist/session/session.service.d.ts +0 -14
  667. package/dist/session/session.service.d.ts.map +0 -1
  668. package/dist/session/session.service.js +0 -73
  669. package/dist/session/session.service.js.map +0 -1
  670. package/dist/types/auth-context.d.ts +0 -7
  671. package/dist/types/auth-context.d.ts.map +0 -1
  672. package/dist/types/auth-context.js +0 -3
  673. package/dist/types/auth-context.js.map +0 -1
  674. package/dist/types/index.d.ts +0 -2
  675. package/dist/types/index.d.ts.map +0 -1
  676. package/dist/types/index.js +0 -18
  677. package/dist/types/index.js.map +0 -1
@@ -1,764 +1,764 @@
1
- import { ClassError, ObjectBase } from '@tomei/general';
2
- import { UserGroupRepository } from './user-group.repository';
3
- import { IUserGroupAttr } from '../../interfaces/user-group.interface';
4
- import { LoginUser, User } from '../../components/login-user';
5
- import { Group } from '../../components/group';
6
- import { ApplicationConfig } from '@tomei/config';
7
- import { ActionEnum, Activity } from '@tomei/activity-history';
8
- import GroupSystemAccessModel from '../../models/group-system-access.entity';
9
- import GroupModel from '../../models/group.entity';
10
- import SystemModel from '../../models/system.entity';
11
- import UserModel from '../../models/user.entity';
12
- import { Transaction } from 'sequelize';
13
-
14
- export class UserGroup extends ObjectBase {
15
- ObjectType = 'UserGroup';
16
- TableName = 'sso_UserGroup';
17
- ObjectName: string;
18
- ObjectId: string;
19
- UserGroupId: number;
20
- UserId: number;
21
- GroupCode: string;
22
- InheritGroupPrivilegeYN = 'Y';
23
- InheritGroupSystemAccessYN = 'Y';
24
- Status: string;
25
- private _CreatedAt: Date;
26
- private _UpdatedAt: Date;
27
- private _CreatedById: number;
28
- private _UpdatedById: number;
29
-
30
- protected static _Repository = new UserGroupRepository();
31
-
32
- get CreatedAt() {
33
- return this._CreatedAt;
34
- }
35
-
36
- get UpdatedAt() {
37
- return this._UpdatedAt;
38
- }
39
-
40
- get CreatedById() {
41
- return this._CreatedById;
42
- }
43
-
44
- get UpdatedById() {
45
- return this._UpdatedById;
46
- }
47
-
48
- private constructor(userGroupAttr?: IUserGroupAttr) {
49
- super();
50
- if (userGroupAttr) {
51
- this.UserGroupId = userGroupAttr.UserGroupId;
52
- this.UserId = userGroupAttr.UserId;
53
- this.GroupCode = userGroupAttr.GroupCode;
54
- this.Status = userGroupAttr.Status;
55
- this.InheritGroupPrivilegeYN = userGroupAttr.InheritGroupPrivilegeYN;
56
- this.InheritGroupSystemAccessYN =
57
- userGroupAttr.InheritGroupSystemAccessYN;
58
- this._CreatedById = userGroupAttr.CreatedById;
59
- this._CreatedAt = userGroupAttr.CreatedAt;
60
- this._UpdatedById = userGroupAttr.UpdatedById;
61
- this._UpdatedAt = userGroupAttr.UpdatedAt;
62
- }
63
- }
64
-
65
- static async init(dbTransaction: any, UserGroupId?: number) {
66
- try {
67
- const userGroup = new UserGroup();
68
- if (UserGroupId) {
69
- const userGroupAttr = await this._Repository.findOne({
70
- where: { UserGroupId },
71
- transaction: dbTransaction,
72
- });
73
- if (userGroupAttr) {
74
- userGroup.UserGroupId = userGroupAttr.UserGroupId;
75
- userGroup.UserId = userGroupAttr.UserId;
76
- userGroup.GroupCode = userGroupAttr.GroupCode;
77
- userGroup.Status = userGroupAttr.Status;
78
- userGroup.InheritGroupPrivilegeYN =
79
- userGroupAttr.InheritGroupPrivilegeYN;
80
- userGroup.InheritGroupSystemAccessYN =
81
- userGroupAttr.InheritGroupSystemAccessYN;
82
- userGroup._CreatedById = userGroupAttr.CreatedById;
83
- userGroup._CreatedAt = userGroupAttr.CreatedAt;
84
- userGroup._UpdatedById = userGroupAttr.UpdatedById;
85
- userGroup._UpdatedAt = userGroupAttr.UpdatedAt;
86
- } else {
87
- throw new ClassError(
88
- 'UserGroup',
89
- 'UserGroupErrMsg00',
90
- 'UserGroup Not Found',
91
- );
92
- }
93
- }
94
- return userGroup;
95
- } catch (error) {
96
- throw error;
97
- }
98
- }
99
-
100
- async create(
101
- loginUser: LoginUser,
102
- dbTransaction: any,
103
- group: Group,
104
- user: User,
105
- ) {
106
- //This method will create a user group record.
107
- try {
108
- // Part 1: Privilege Checking
109
- // Call loginUser.checkPrivileges() by passing:
110
- // SystemCode: "<get_from_app_config>"
111
- // PrivilegeCode: "USER_GROUP_CREATE"
112
- const systemCode =
113
- ApplicationConfig.getComponentConfigValue('system-code');
114
- const isPrivileged = await loginUser.checkPrivileges(
115
- systemCode,
116
- 'USER_GROUP_CREATE',
117
- );
118
-
119
- // If user does not have privilege to update user, throw a ClassError
120
- if (!isPrivileged) {
121
- throw new ClassError(
122
- 'UserGroup',
123
- 'UserGroupErrMsg0X',
124
- 'User does not have privilege to create user group.',
125
- );
126
- }
127
-
128
- // Part 2: Validation
129
- // Make sure group.GroupCode exists, if not throw new ClassError by passing:
130
- // Classname: "UserGroup"
131
- // MethodName: "create"
132
- // MessageCode: "UserGroupErrMsg02"
133
- // Message: "GroupCode is required."
134
- if (!group.GroupCode) {
135
- throw new ClassError(
136
- 'UserGroup',
137
- 'UserGroupErrMsg02',
138
- 'GroupCode is required.',
139
- );
140
- }
141
-
142
- // Make sure user.UserId exists, if not throw new ClassError by passing:
143
- // Classname: "UserGroup"
144
- // MethodName: "create"
145
- // MessageCode: "UserGroupErrMsg03"
146
- // Message: "UserId is required."
147
- if (!user.UserId) {
148
- throw new ClassError(
149
- 'UserGroup',
150
- 'UserGroupErrMsg03',
151
- 'UserId is required.',
152
- );
153
- }
154
-
155
- // Call UserGroup.findOne static method by passing:
156
- // loginUser
157
- // dbTransaction
158
- // GroupCode: group.GroupCode
159
- // UserId: user.UserId
160
- const userGroup = await UserGroup.findOne(
161
- dbTransaction,
162
- loginUser,
163
- group.GroupCode,
164
- user.UserId,
165
- );
166
-
167
- if (userGroup) {
168
- return userGroup;
169
- }
170
-
171
- // Part 3: Create
172
- // Set below attributes:
173
- // UserGroupId: this.createId()
174
- // UserId: Params.user.UserId
175
- // GroupCode: Params.group.GroupCode
176
- // Status: "Active"
177
- // CreatedById: loginUser.ObjectId
178
- // CreatedAt: current timestamp
179
- // UpdatedById: loginUser.ObjectId
180
- // UpdatedAt: current timestamp
181
- this.UserId = user.UserId;
182
- this.GroupCode = group.GroupCode;
183
- this.Status = 'Active';
184
- this._CreatedById = loginUser.UserId;
185
- this._CreatedAt = new Date();
186
- this._UpdatedById = loginUser.UserId;
187
- this._UpdatedAt = new Date();
188
-
189
- // Call UserGroup._Repo create() method by passing:
190
- // populate this instance attributes
191
- // dbTransaction
192
-
193
- const userData = await UserGroup._Repository.create(
194
- {
195
- UserId: this.UserId,
196
- GroupCode: this.GroupCode,
197
- Status: this.Status,
198
- CreatedById: this._CreatedById,
199
- CreatedAt: this._CreatedAt,
200
- UpdatedById: this._UpdatedById,
201
- UpdatedAt: this._UpdatedAt,
202
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
203
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
204
- },
205
- {
206
- transaction: dbTransaction,
207
- },
208
- );
209
-
210
- this.UserGroupId = userData.UserGroupId;
211
-
212
- // Part 4: Record Create UserGroup Activity
213
- // Initialise EntityValueAfter variable and set to this instance
214
- const EntityValueAfter = {
215
- UserGroupId: this.UserGroupId,
216
- UserId: this.UserId,
217
- GroupCode: this.GroupCode,
218
- Status: this.Status,
219
- CreatedById: this._CreatedById,
220
- CreatedAt: this._CreatedAt,
221
- UpdatedById: this._UpdatedById,
222
- UpdatedAt: this._UpdatedAt,
223
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
224
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
225
- };
226
- // Instantiate new activity from Activity class, call createId() method, then set:
227
- // Action: ActionEnum.Create
228
- // Description: Assign user to group.
229
- // EntityType: "UserGroup"
230
- // EntityId: this.UserGroupId
231
- // EntityValueBefore: <stringify of empty object>
232
- // EntityValueAfter: EntityValueAfter
233
- const activity = new Activity();
234
- activity.ActivityId = activity.createId();
235
- activity.Action = ActionEnum.CREATE;
236
- activity.Description = 'Assign user to group.';
237
- activity.EntityType = 'UserGroup';
238
- activity.EntityId = this.UserGroupId.toString();
239
- activity.EntityValueBefore = JSON.stringify({});
240
- activity.EntityValueAfter = JSON.stringify(EntityValueAfter);
241
- // Call new activity create method by passing:
242
- // dbTransaction
243
- // userId: loginUser.ObjectId
244
- // return this instance
245
- await activity.create(loginUser.ObjectId, dbTransaction);
246
-
247
- return this;
248
- } catch (error) {
249
- throw error;
250
- }
251
- }
252
-
253
- public static async findOne(
254
- dbTransaction: any,
255
- loginUser: LoginUser,
256
- GroupCode: string,
257
- UserId: number,
258
- ): Promise<UserGroup> {
259
- try {
260
- // Part 1: Privilege Checking
261
- // Call loginUser.checkPrivileges() by passing:
262
- // SystemCode: "<get_from_app_config>"
263
- // PrivilegeCode: "USER_GROUP_VIEW"
264
- const systemCode =
265
- ApplicationConfig.getComponentConfigValue('system-code');
266
- const isPrivileged = await loginUser.checkPrivileges(
267
- systemCode,
268
- 'USER_GROUP_VIEW',
269
- );
270
-
271
- // If user does not have privilege to view user group, throw a ClassError
272
- if (!isPrivileged) {
273
- throw new ClassError(
274
- 'UserGroup',
275
- 'UserGroupErrMsg0X',
276
- 'User does not have privilege to view user group.',
277
- );
278
- }
279
-
280
- // Part 2: Retrieve Record
281
- // Call UserGroup._Repo findOne method by passing:
282
- // where:
283
- // [Op.AND]:
284
- // UserId: Params.UserId
285
- // GroupCode: Params.GroupCode
286
- // dbTransaction
287
- const userGroupAttr = await UserGroup._Repository.findOne({
288
- where: {
289
- UserId,
290
- GroupCode,
291
- },
292
- transaction: dbTransaction,
293
- });
294
- // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
295
- if (userGroupAttr) {
296
- return new UserGroup(userGroupAttr.get({ plain: true }));
297
- }
298
- // If record not exists, return null.
299
- return null;
300
- } catch (error) {
301
- throw error;
302
- }
303
- }
304
-
305
- public static async getUser(
306
- dbTransaction: any,
307
- loginUser: LoginUser,
308
- GroupCode: string,
309
- ) {
310
- try {
311
- // Part 1: Privilege Checking
312
- // Call loginUser.checkPrivileges() by passing:
313
- // SystemCode: "<get_from_app_config>"
314
- // PrivilegeCode: "USER_GROUP_VIEW"
315
- const systemCode =
316
- ApplicationConfig.getComponentConfigValue('system-code');
317
- const isPrivileged = await loginUser.checkPrivileges(
318
- systemCode,
319
- 'USER_GROUP_VIEW',
320
- );
321
-
322
- // If user does not have privilege to view user group, throw a ClassError
323
- if (!isPrivileged) {
324
- throw new ClassError(
325
- 'UserGroup',
326
- 'UserGroupErrMsg0X',
327
- 'User does not have privilege to view user group.',
328
- );
329
- }
330
-
331
- // Part 2: Retrieve Record
332
- // Call UserGroup._Repo findAll method by passing:
333
- // where:
334
- // GroupCode: Params.GroupCode
335
- // dbTransaction
336
- const userGroup = await UserGroup._Repository.findAll({
337
- where: {
338
- GroupCode,
339
- },
340
- include: [
341
- {
342
- model: UserModel,
343
- as: 'User',
344
- attributes: ['UserId', 'FullName', 'Email'],
345
- },
346
- ],
347
- transaction: dbTransaction,
348
- });
349
- // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
350
- return userGroup;
351
- // If record not exists, return null.
352
- return null;
353
- } catch (error) {
354
- throw error;
355
- }
356
- }
357
-
358
- static async findAllInheritedSystemAccesses(
359
- UserId: number,
360
- loginUser: User,
361
- dbTransaction: any,
362
- ): Promise<
363
- {
364
- UserGroupId: number;
365
- GroupCode: string;
366
- GroupName: string;
367
- InheritGroupSystemAccessYN: string;
368
- CreatedAt: Date;
369
- UpdatedAt: Date;
370
- Systems: {
371
- SystemCode: string;
372
- SystemName: string;
373
- AccessStatus: string;
374
- CreatedAt: Date;
375
- UpdatedAt: Date;
376
- }[];
377
- }[]
378
- > {
379
- try {
380
- // Part 1: Privilege Checking
381
- // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
382
- // SystemCode: Retrieve from app config.
383
- // PrivilegeCode: 'USER_SYSTEM_ACCESS_LIST'.
384
- // If the privilege check fails, throw an error with a 403 Forbidden status.
385
- const systemCode =
386
- ApplicationConfig.getComponentConfigValue('system-code');
387
- const isPrivileged = await loginUser.checkPrivileges(
388
- systemCode,
389
- 'USER_SYSTEM_ACCESS_LIST',
390
- );
391
- if (!isPrivileged) {
392
- throw new ClassError(
393
- 'UserGroup',
394
- 'UserGroupErrMsg0X',
395
- 'User does not have privilege to view user system access.',
396
- 'findAllInheritedSystemAccesses',
397
- 403,
398
- );
399
- }
400
- // Part 2: Retrieve User Groups
401
- // Query the sso_UserGroup table to find all active groups the user belongs to.
402
- // Join with the sso_Group table to retrieve the GroupCode, GroupName, and InheritGroupSystemAccessYNfields.
403
- // Ensure that the value of InheritGroupSystemAccessYN is explicitly 'Y' or 'N' for each group.
404
- // If InheritGroupSystemAccessYN is not set, default it to 'N'.
405
- // Return only active groups (based on Status field).
406
- // The query should return the following fields for each group:
407
- // GroupCode
408
- // GroupName
409
- // InheritGroupSystemAccessYN
410
-
411
- const userGroups = await UserGroup._Repository.findAll({
412
- where: {
413
- UserId,
414
- Status: 'Active',
415
- },
416
- include: [
417
- {
418
- model: GroupModel,
419
- required: true,
420
- where: {
421
- Status: 'Active',
422
- },
423
- include: [
424
- {
425
- model: GroupSystemAccessModel,
426
- where: {
427
- Status: 'Active',
428
- },
429
- include: [
430
- {
431
- model: SystemModel,
432
- },
433
- ],
434
- },
435
- ],
436
- },
437
- ],
438
- transaction: dbTransaction,
439
- });
440
- const result: {
441
- UserGroupId: number;
442
- GroupCode: string;
443
- GroupName: string;
444
- InheritGroupSystemAccessYN: string;
445
- CreatedAt: Date;
446
- UpdatedAt: Date;
447
- Systems: {
448
- SystemCode: string;
449
- SystemName: string;
450
- AccessStatus: string;
451
- CreatedAt: Date;
452
- UpdatedAt: Date;
453
- }[];
454
- }[] = [];
455
- for (const userGroup of userGroups) {
456
- // Part 3: Retrieve System Access for Groups with Inheritance
457
- // For each group where InheritGroupSystemAccessYN = 'Y', query the sso_GroupSystemAccess table to retrieve system access details.
458
- // Join with the sso_System table to fetch system details (SystemName, SystemCode).
459
- // Ensure only active system accesses (AccessStatus = 'Active') are included.
460
- // For each system access, retrieve the following fields:
461
- // SystemName (from sso_System.Name)
462
- // SystemCode (from sso_System.SystemCode)
463
- // AccessStatus (from sso_GroupSystemAccess.Status)
464
- // CreatedAt (from sso_GroupSystemAccess.CreatedAt)
465
- // UpdatedAt (from sso_GroupSystemAccess.UpdatedAt)
466
- // Part 4: Handling Non-Inherited Groups
467
- // For groups where InheritGroupSystemAccessYN = 'N', return the group details without system access records.
468
- // Set the Systems field to an empty array or null to indicate no inherited access for those groups.
469
- // Part 5: Grouping Results
470
- // Group the results by GroupCode and GroupName.
471
- // For each group, create an object with the following structure:
472
- // GroupCode: Code of the group.
473
- // GroupName: Name of the group.
474
- // InheritGroupSystemAccessYN: 'Y' or 'N', indicating whether the user inherits system access from the group.
475
- // Systems: An array of system access objects (for groups where InheritGroupSystemAccessYN = 'Y'), each including:
476
- // SystemName
477
- // SystemCode
478
- // AccessStatus
479
- // CreatedAt
480
- // UpdatedAt
481
- // For groups where InheritGroupSystemAccessYN = 'N', Systems will be an empty array.
482
- const groupData = {
483
- UserGroupId: userGroup.UserGroupId,
484
- GroupCode: userGroup.GroupCode,
485
- GroupName: userGroup.Group.Name,
486
- InheritGroupSystemAccessYN: userGroup.InheritGroupSystemAccessYN,
487
- CreatedAt: userGroup.CreatedAt,
488
- UpdatedAt: userGroup.UpdatedAt,
489
- Systems: [],
490
- };
491
-
492
- if (userGroup.InheritGroupSystemAccessYN === 'Y') {
493
- groupData.Systems = userGroup.Group.GroupSystemAccesses.map(
494
- (groupSystemAccess) => {
495
- return {
496
- SystemCode: groupSystemAccess.System.SystemCode,
497
- SystemName: groupSystemAccess.System.Name,
498
- AccessStatus: groupSystemAccess.Status,
499
- CreatedAt: groupSystemAccess.CreatedAt,
500
- UpdatedAt: groupSystemAccess.UpdatedAt,
501
- };
502
- },
503
- );
504
- }
505
-
506
- result.push(groupData);
507
- }
508
-
509
- // Part 6: Return Grouped Data
510
- // Return the array of grouped system accesses for the user's groups, including both inherited ('Y') and non-inherited ('N') system accesses.
511
- return result;
512
- } catch (error) {
513
- throw error;
514
- }
515
- }
516
-
517
- public async update(
518
- loginUser: LoginUser,
519
- dbTransaction: Transaction,
520
- UpdatedProperties: {
521
- InheritGroupPrivilegeYN?: string;
522
- InheritGroupSystemAccessYN?: string;
523
- },
524
- ): Promise<UserGroup> {
525
- try {
526
- // Part 1: Privilege Checking
527
- // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
528
- // SystemCode: Retrieve from app config.
529
- // PrivilegeCode: 'USER_GROUP_UPDATE'.
530
- const systemCode =
531
- ApplicationConfig.getComponentConfigValue('system-code');
532
- const isPrivileged = await loginUser.checkPrivileges(
533
- systemCode,
534
- 'USER_GROUP_UPDATE',
535
- );
536
- // If the privilege check fails, throw an error with a 403 Forbidden status.
537
- if (!isPrivileged) {
538
- throw new ClassError(
539
- 'UserGroup',
540
- 'UserGroupErrMsg0X',
541
- 'User does not have privilege to update user group.',
542
- 'update',
543
- 403,
544
- );
545
- }
546
- // Part 2: Validation
547
- // Check to make sure that at least one of the UpdatedProperties is exist if not throw error.
548
- if (
549
- !UpdatedProperties.InheritGroupPrivilegeYN &&
550
- !UpdatedProperties.InheritGroupSystemAccessYN
551
- ) {
552
- throw new ClassError(
553
- 'UserGroup',
554
- 'UserGroupErrMsg04',
555
- 'At least one of the properties to update is required.',
556
- 'update',
557
- 400,
558
- );
559
- }
560
- // Part 3: Update User Group
561
- // Call the UserGroup._Repo.update() method to perform the update operation, passing:
562
- // InheritGroupPrivilegeYN (if exist): updatedProperties.InheritGroupPrivilegeYN
563
- // InheritGroupSystemAccessYN (if exist): updatedProperties.InheritGroupSystemAccessYN
564
- // UpdatedById: loginUser.UserId (to indicate who updated the record).
565
- // UpdatedAt: Set to the current date and time.
566
- // dbTransaction: The database transaction instance.
567
- const entityValueBefore = {
568
- UserGroupId: this.UserGroupId,
569
- UserId: this.UserId,
570
- GroupCode: this.GroupCode,
571
- Status: this.Status,
572
- CreatedById: this._CreatedById,
573
- CreatedAt: this._CreatedAt,
574
- UpdatedById: this._UpdatedById,
575
- UpdatedAt: this._UpdatedAt,
576
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
577
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
578
- };
579
-
580
- this._UpdatedById = loginUser.UserId;
581
- this._UpdatedAt = new Date();
582
- if (UpdatedProperties.InheritGroupPrivilegeYN) {
583
- this.InheritGroupPrivilegeYN =
584
- UpdatedProperties.InheritGroupPrivilegeYN;
585
- }
586
- if (UpdatedProperties.InheritGroupSystemAccessYN) {
587
- this.InheritGroupSystemAccessYN =
588
- UpdatedProperties.InheritGroupSystemAccessYN;
589
- }
590
-
591
- await UserGroup._Repository.update(
592
- {
593
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
594
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
595
- UpdatedById: this._UpdatedById,
596
- UpdatedAt: this._UpdatedAt,
597
- },
598
- {
599
- where: {
600
- UserGroupId: this.UserGroupId,
601
- },
602
- transaction: dbTransaction,
603
- },
604
- );
605
-
606
- // Part 2: Record Activity History
607
- // Initialize a variable entityValueBefore to store the current state of the record before the update.
608
- const entityValueAfter = {
609
- UserGroupId: this.UserGroupId,
610
- UserId: this.UserId,
611
- GroupCode: this.GroupCode,
612
- Status: this.Status,
613
- CreatedById: this._CreatedById,
614
- CreatedAt: this._CreatedAt,
615
- UpdatedById: this._UpdatedById,
616
- UpdatedAt: this._UpdatedAt,
617
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
618
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
619
- };
620
- // Create an instance of the Activity class and set the following properties:
621
- // ActivityId: Call activity.createId().
622
- // Action: Set to ActionEnum.Update.
623
- // Description: Set to Update User Group.
624
- // EntityType: Set to UserGroup.
625
- // EntityId: Use the ID of the updated record.
626
- // EntityValueBefore: Stringify entityValueBefore to capture the state before the update.
627
- // EntityValueAfter: Stringify the updated record to capture the new state after the update.
628
- const activity = new Activity();
629
- activity.ActivityId = activity.createId();
630
- activity.Action = ActionEnum.UPDATE;
631
- activity.Description = 'Update User Group';
632
- activity.EntityType = 'UserGroup';
633
- activity.EntityId = this.UserGroupId.toString();
634
- activity.EntityValueBefore = JSON.stringify(entityValueBefore);
635
- activity.EntityValueAfter = JSON.stringify(entityValueAfter);
636
-
637
- // Call the activity create a method with the following parameters:
638
- // dbTransaction
639
- // userId: loginUser.UserId
640
- // Part 3: Return Updated Record
641
-
642
- await activity.create(loginUser.ObjectId, dbTransaction);
643
- // Retrieve the updated user group record from the database or return the updated instance as needed.
644
- return this;
645
- } catch (error) {
646
- throw error;
647
- }
648
- }
649
-
650
- public static async isUserMemberOfGroup(
651
- dbTransaction: any,
652
- loginUser: LoginUser,
653
- UserId: number,
654
- GroupCode: string,
655
- ): Promise<boolean> {
656
- try {
657
- // Part 1: Privilege Checking
658
- // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
659
- // SystemCode: Retrieve from app config.
660
- // PrivilegeCode: 'USER_GROUP_VIEW'.
661
- const systemCode =
662
- ApplicationConfig.getComponentConfigValue('system-code');
663
- const isPrivileged = await loginUser.checkPrivileges(
664
- systemCode,
665
- 'USER_GROUP_VIEW',
666
- );
667
- // If the privilege check fails, throw an error with a 403 Forbidden status.
668
- if (!isPrivileged) {
669
- throw new ClassError(
670
- 'UserGroup',
671
- 'UserGroupErrMsg0X',
672
- 'User does not have privilege to view user group.',
673
- 'isUserMemberOfGroup',
674
- 403,
675
- );
676
- }
677
- // Part 2: Retrieve User Group
678
- // Query the sso_UserGroup table to find the user group record with the given UserId and GroupCode.
679
- // If the record exists, return true; otherwise, return false.
680
- const userGroup = await UserGroup.findOne(
681
- dbTransaction,
682
- loginUser,
683
- GroupCode,
684
- UserId,
685
- );
686
- return !!userGroup;
687
- } catch (error) {
688
- throw error;
689
- }
690
- }
691
-
692
- public async delete(
693
- loginUser: LoginUser,
694
- dbTransaction: Transaction,
695
- ): Promise<void> {
696
- try {
697
- // Part 1: Privilege Checking
698
- // Call loginUser.checkPrivileges() to ensure the user has permission to delete user group records.
699
- // SystemCode: Retrieve from app config.
700
- // PrivilegeCode: 'USER_GROUP_DELETE'.
701
- const systemCode =
702
- ApplicationConfig.getComponentConfigValue('system-code');
703
- const isPrivileged = await loginUser.checkPrivileges(
704
- systemCode,
705
- 'USER_GROUP_DELETE',
706
- );
707
- // If the privilege check fails, throw an error with a 403 Forbidden status.
708
- if (!isPrivileged) {
709
- throw new ClassError(
710
- 'UserGroup',
711
- 'UserGroupErrMsg0X',
712
- 'User does not have privilege to delete user group.',
713
- 'delete',
714
- 403,
715
- );
716
- }
717
- // Part 2: Delete User Group
718
- // Call the UserGroup._Repo.destroy() method to delete the user group record with the given UserGroupId.
719
- // Pass the dbTransaction parameter to ensure the operation is part of the current transaction.
720
- await UserGroup._Repository.delete({
721
- where: {
722
- UserGroupId: this.UserGroupId,
723
- },
724
- transaction: dbTransaction,
725
- });
726
- // Part 3: Record Activity History
727
- // Initialize a variable entityValueBefore to store the current state of the record before the update.
728
- const entityValueBefore = {
729
- UserGroupId: this.UserGroupId,
730
- UserId: this.UserId,
731
- GroupCode: this.GroupCode,
732
- Status: this.Status,
733
- CreatedById: this._CreatedById,
734
- CreatedAt: this._CreatedAt,
735
- UpdatedById: this._UpdatedById,
736
- UpdatedAt: this._UpdatedAt,
737
- InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
738
- InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
739
- };
740
- // Create an instance of the Activity class and set the following properties:
741
- // ActivityId: Call activity.createId().
742
- // Action: Set to ActionEnum.Delete.
743
- // Description: Set to Delete User Group.
744
- // EntityType: Set to UserGroup.
745
- // EntityId: Use the ID of the deleted record.
746
- // EntityValueBefore: Stringify entityValueBefore to capture the state before the delete.
747
- // EntityValueAfter: Set to an empty string to indicate the record has been deleted.
748
- const activity = new Activity();
749
- activity.ActivityId = activity.createId();
750
- activity.Action = ActionEnum.DELETE;
751
- activity.Description = `Delete User Group ${this.UserGroupId}`;
752
- activity.EntityType = 'UserGroup';
753
- activity.EntityId = this.UserGroupId.toString();
754
- activity.EntityValueBefore = JSON.stringify(entityValueBefore);
755
- activity.EntityValueAfter = JSON.stringify({});
756
- // Call the activity create method with the following parameters:
757
- // dbTransaction
758
- // userId: loginUser.UserId
759
- await activity.create(loginUser.ObjectId, dbTransaction);
760
- } catch (error) {
761
- throw error;
762
- }
763
- }
764
- }
1
+ import { ClassError, ObjectBase } from '@tomei/general';
2
+ import { UserGroupRepository } from './user-group.repository';
3
+ import { IUserGroupAttr } from '../../interfaces/user-group.interface';
4
+ import { LoginUser, User } from '../../components/login-user';
5
+ import { Group } from '../../components/group';
6
+ import { ApplicationConfig } from '@tomei/config';
7
+ import { ActionEnum, Activity } from '@tomei/activity-history';
8
+ import GroupSystemAccessModel from '../../models/group-system-access.entity';
9
+ import GroupModel from '../../models/group.entity';
10
+ import SystemModel from '../../models/system.entity';
11
+ import UserModel from '../../models/user.entity';
12
+ import { Transaction } from 'sequelize';
13
+
14
+ export class UserGroup extends ObjectBase {
15
+ ObjectType = 'UserGroup';
16
+ TableName = 'sso_UserGroup';
17
+ ObjectName: string;
18
+ ObjectId: string;
19
+ UserGroupId: number;
20
+ UserId: number;
21
+ GroupCode: string;
22
+ InheritGroupPrivilegeYN = 'Y';
23
+ InheritGroupSystemAccessYN = 'Y';
24
+ Status: string;
25
+ private _CreatedAt: Date;
26
+ private _UpdatedAt: Date;
27
+ private _CreatedById: number;
28
+ private _UpdatedById: number;
29
+
30
+ protected static _Repository = new UserGroupRepository();
31
+
32
+ get CreatedAt() {
33
+ return this._CreatedAt;
34
+ }
35
+
36
+ get UpdatedAt() {
37
+ return this._UpdatedAt;
38
+ }
39
+
40
+ get CreatedById() {
41
+ return this._CreatedById;
42
+ }
43
+
44
+ get UpdatedById() {
45
+ return this._UpdatedById;
46
+ }
47
+
48
+ private constructor(userGroupAttr?: IUserGroupAttr) {
49
+ super();
50
+ if (userGroupAttr) {
51
+ this.UserGroupId = userGroupAttr.UserGroupId;
52
+ this.UserId = userGroupAttr.UserId;
53
+ this.GroupCode = userGroupAttr.GroupCode;
54
+ this.Status = userGroupAttr.Status;
55
+ this.InheritGroupPrivilegeYN = userGroupAttr.InheritGroupPrivilegeYN;
56
+ this.InheritGroupSystemAccessYN =
57
+ userGroupAttr.InheritGroupSystemAccessYN;
58
+ this._CreatedById = userGroupAttr.CreatedById;
59
+ this._CreatedAt = userGroupAttr.CreatedAt;
60
+ this._UpdatedById = userGroupAttr.UpdatedById;
61
+ this._UpdatedAt = userGroupAttr.UpdatedAt;
62
+ }
63
+ }
64
+
65
+ static async init(dbTransaction: any, UserGroupId?: number) {
66
+ try {
67
+ const userGroup = new UserGroup();
68
+ if (UserGroupId) {
69
+ const userGroupAttr = await this._Repository.findOne({
70
+ where: { UserGroupId },
71
+ transaction: dbTransaction,
72
+ });
73
+ if (userGroupAttr) {
74
+ userGroup.UserGroupId = userGroupAttr.UserGroupId;
75
+ userGroup.UserId = userGroupAttr.UserId;
76
+ userGroup.GroupCode = userGroupAttr.GroupCode;
77
+ userGroup.Status = userGroupAttr.Status;
78
+ userGroup.InheritGroupPrivilegeYN =
79
+ userGroupAttr.InheritGroupPrivilegeYN;
80
+ userGroup.InheritGroupSystemAccessYN =
81
+ userGroupAttr.InheritGroupSystemAccessYN;
82
+ userGroup._CreatedById = userGroupAttr.CreatedById;
83
+ userGroup._CreatedAt = userGroupAttr.CreatedAt;
84
+ userGroup._UpdatedById = userGroupAttr.UpdatedById;
85
+ userGroup._UpdatedAt = userGroupAttr.UpdatedAt;
86
+ } else {
87
+ throw new ClassError(
88
+ 'UserGroup',
89
+ 'UserGroupErrMsg00',
90
+ 'UserGroup Not Found',
91
+ );
92
+ }
93
+ }
94
+ return userGroup;
95
+ } catch (error) {
96
+ throw error;
97
+ }
98
+ }
99
+
100
+ async create(
101
+ loginUser: LoginUser,
102
+ dbTransaction: any,
103
+ group: Group,
104
+ user: User,
105
+ ) {
106
+ //This method will create a user group record.
107
+ try {
108
+ // Part 1: Privilege Checking
109
+ // Call loginUser.checkPrivileges() by passing:
110
+ // SystemCode: "<get_from_app_config>"
111
+ // PrivilegeCode: "USER_GROUP_CREATE"
112
+ const systemCode =
113
+ ApplicationConfig.getComponentConfigValue('system-code');
114
+ const isPrivileged = await loginUser.checkPrivileges(
115
+ systemCode,
116
+ 'USER_GROUP_CREATE',
117
+ );
118
+
119
+ // If user does not have privilege to update user, throw a ClassError
120
+ if (!isPrivileged) {
121
+ throw new ClassError(
122
+ 'UserGroup',
123
+ 'UserGroupErrMsg0X',
124
+ 'User does not have privilege to create user group.',
125
+ );
126
+ }
127
+
128
+ // Part 2: Validation
129
+ // Make sure group.GroupCode exists, if not throw new ClassError by passing:
130
+ // Classname: "UserGroup"
131
+ // MethodName: "create"
132
+ // MessageCode: "UserGroupErrMsg02"
133
+ // Message: "GroupCode is required."
134
+ if (!group.GroupCode) {
135
+ throw new ClassError(
136
+ 'UserGroup',
137
+ 'UserGroupErrMsg02',
138
+ 'GroupCode is required.',
139
+ );
140
+ }
141
+
142
+ // Make sure user.UserId exists, if not throw new ClassError by passing:
143
+ // Classname: "UserGroup"
144
+ // MethodName: "create"
145
+ // MessageCode: "UserGroupErrMsg03"
146
+ // Message: "UserId is required."
147
+ if (!user.UserId) {
148
+ throw new ClassError(
149
+ 'UserGroup',
150
+ 'UserGroupErrMsg03',
151
+ 'UserId is required.',
152
+ );
153
+ }
154
+
155
+ // Call UserGroup.findOne static method by passing:
156
+ // loginUser
157
+ // dbTransaction
158
+ // GroupCode: group.GroupCode
159
+ // UserId: user.UserId
160
+ const userGroup = await UserGroup.findOne(
161
+ dbTransaction,
162
+ loginUser,
163
+ group.GroupCode,
164
+ user.UserId,
165
+ );
166
+
167
+ if (userGroup) {
168
+ return userGroup;
169
+ }
170
+
171
+ // Part 3: Create
172
+ // Set below attributes:
173
+ // UserGroupId: this.createId()
174
+ // UserId: Params.user.UserId
175
+ // GroupCode: Params.group.GroupCode
176
+ // Status: "Active"
177
+ // CreatedById: loginUser.ObjectId
178
+ // CreatedAt: current timestamp
179
+ // UpdatedById: loginUser.ObjectId
180
+ // UpdatedAt: current timestamp
181
+ this.UserId = user.UserId;
182
+ this.GroupCode = group.GroupCode;
183
+ this.Status = 'Active';
184
+ this._CreatedById = loginUser.UserId;
185
+ this._CreatedAt = new Date();
186
+ this._UpdatedById = loginUser.UserId;
187
+ this._UpdatedAt = new Date();
188
+
189
+ // Call UserGroup._Repo create() method by passing:
190
+ // populate this instance attributes
191
+ // dbTransaction
192
+
193
+ const userData = await UserGroup._Repository.create(
194
+ {
195
+ UserId: this.UserId,
196
+ GroupCode: this.GroupCode,
197
+ Status: this.Status,
198
+ CreatedById: this._CreatedById,
199
+ CreatedAt: this._CreatedAt,
200
+ UpdatedById: this._UpdatedById,
201
+ UpdatedAt: this._UpdatedAt,
202
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
203
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
204
+ },
205
+ {
206
+ transaction: dbTransaction,
207
+ },
208
+ );
209
+
210
+ this.UserGroupId = userData.UserGroupId;
211
+
212
+ // Part 4: Record Create UserGroup Activity
213
+ // Initialise EntityValueAfter variable and set to this instance
214
+ const EntityValueAfter = {
215
+ UserGroupId: this.UserGroupId,
216
+ UserId: this.UserId,
217
+ GroupCode: this.GroupCode,
218
+ Status: this.Status,
219
+ CreatedById: this._CreatedById,
220
+ CreatedAt: this._CreatedAt,
221
+ UpdatedById: this._UpdatedById,
222
+ UpdatedAt: this._UpdatedAt,
223
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
224
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
225
+ };
226
+ // Instantiate new activity from Activity class, call createId() method, then set:
227
+ // Action: ActionEnum.Create
228
+ // Description: Assign user to group.
229
+ // EntityType: "UserGroup"
230
+ // EntityId: this.UserGroupId
231
+ // EntityValueBefore: <stringify of empty object>
232
+ // EntityValueAfter: EntityValueAfter
233
+ const activity = new Activity();
234
+ activity.ActivityId = activity.createId();
235
+ activity.Action = ActionEnum.CREATE;
236
+ activity.Description = 'Assign user to group.';
237
+ activity.EntityType = 'UserGroup';
238
+ activity.EntityId = this.UserGroupId.toString();
239
+ activity.EntityValueBefore = JSON.stringify({});
240
+ activity.EntityValueAfter = JSON.stringify(EntityValueAfter);
241
+ // Call new activity create method by passing:
242
+ // dbTransaction
243
+ // userId: loginUser.ObjectId
244
+ // return this instance
245
+ await activity.create(loginUser.ObjectId, dbTransaction);
246
+
247
+ return this;
248
+ } catch (error) {
249
+ throw error;
250
+ }
251
+ }
252
+
253
+ public static async findOne(
254
+ dbTransaction: any,
255
+ loginUser: LoginUser,
256
+ GroupCode: string,
257
+ UserId: number,
258
+ ): Promise<UserGroup> {
259
+ try {
260
+ // Part 1: Privilege Checking
261
+ // Call loginUser.checkPrivileges() by passing:
262
+ // SystemCode: "<get_from_app_config>"
263
+ // PrivilegeCode: "USER_GROUP_VIEW"
264
+ const systemCode =
265
+ ApplicationConfig.getComponentConfigValue('system-code');
266
+ const isPrivileged = await loginUser.checkPrivileges(
267
+ systemCode,
268
+ 'USER_GROUP_VIEW',
269
+ );
270
+
271
+ // If user does not have privilege to view user group, throw a ClassError
272
+ if (!isPrivileged) {
273
+ throw new ClassError(
274
+ 'UserGroup',
275
+ 'UserGroupErrMsg0X',
276
+ 'User does not have privilege to view user group.',
277
+ );
278
+ }
279
+
280
+ // Part 2: Retrieve Record
281
+ // Call UserGroup._Repo findOne method by passing:
282
+ // where:
283
+ // [Op.AND]:
284
+ // UserId: Params.UserId
285
+ // GroupCode: Params.GroupCode
286
+ // dbTransaction
287
+ const userGroupAttr = await UserGroup._Repository.findOne({
288
+ where: {
289
+ UserId,
290
+ GroupCode,
291
+ },
292
+ transaction: dbTransaction,
293
+ });
294
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
295
+ if (userGroupAttr) {
296
+ return new UserGroup(userGroupAttr.get({ plain: true }));
297
+ }
298
+ // If record not exists, return null.
299
+ return null;
300
+ } catch (error) {
301
+ throw error;
302
+ }
303
+ }
304
+
305
+ public static async getUser(
306
+ dbTransaction: any,
307
+ loginUser: LoginUser,
308
+ GroupCode: string,
309
+ ) {
310
+ try {
311
+ // Part 1: Privilege Checking
312
+ // Call loginUser.checkPrivileges() by passing:
313
+ // SystemCode: "<get_from_app_config>"
314
+ // PrivilegeCode: "USER_GROUP_VIEW"
315
+ const systemCode =
316
+ ApplicationConfig.getComponentConfigValue('system-code');
317
+ const isPrivileged = await loginUser.checkPrivileges(
318
+ systemCode,
319
+ 'USER_GROUP_VIEW',
320
+ );
321
+
322
+ // If user does not have privilege to view user group, throw a ClassError
323
+ if (!isPrivileged) {
324
+ throw new ClassError(
325
+ 'UserGroup',
326
+ 'UserGroupErrMsg0X',
327
+ 'User does not have privilege to view user group.',
328
+ );
329
+ }
330
+
331
+ // Part 2: Retrieve Record
332
+ // Call UserGroup._Repo findAll method by passing:
333
+ // where:
334
+ // GroupCode: Params.GroupCode
335
+ // dbTransaction
336
+ const userGroup = await UserGroup._Repository.findAll({
337
+ where: {
338
+ GroupCode,
339
+ },
340
+ include: [
341
+ {
342
+ model: UserModel,
343
+ as: 'User',
344
+ attributes: ['UserId', 'FullName', 'Email'],
345
+ },
346
+ ],
347
+ transaction: dbTransaction,
348
+ });
349
+ // If record exists, instantiate UserGroup by calling the private constructor and passing the attributes. Then, returns the instance
350
+ return userGroup;
351
+ // If record not exists, return null.
352
+ return null;
353
+ } catch (error) {
354
+ throw error;
355
+ }
356
+ }
357
+
358
+ static async findAllInheritedSystemAccesses(
359
+ UserId: number,
360
+ loginUser: User,
361
+ dbTransaction: any,
362
+ ): Promise<
363
+ {
364
+ UserGroupId: number;
365
+ GroupCode: string;
366
+ GroupName: string;
367
+ InheritGroupSystemAccessYN: string;
368
+ CreatedAt: Date;
369
+ UpdatedAt: Date;
370
+ Systems: {
371
+ SystemCode: string;
372
+ SystemName: string;
373
+ AccessStatus: string;
374
+ CreatedAt: Date;
375
+ UpdatedAt: Date;
376
+ }[];
377
+ }[]
378
+ > {
379
+ try {
380
+ // Part 1: Privilege Checking
381
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
382
+ // SystemCode: Retrieve from app config.
383
+ // PrivilegeCode: 'USER_SYSTEM_ACCESS_LIST'.
384
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
385
+ const systemCode =
386
+ ApplicationConfig.getComponentConfigValue('system-code');
387
+ const isPrivileged = await loginUser.checkPrivileges(
388
+ systemCode,
389
+ 'USER_SYSTEM_ACCESS_LIST',
390
+ );
391
+ if (!isPrivileged) {
392
+ throw new ClassError(
393
+ 'UserGroup',
394
+ 'UserGroupErrMsg0X',
395
+ 'User does not have privilege to view user system access.',
396
+ 'findAllInheritedSystemAccesses',
397
+ 403,
398
+ );
399
+ }
400
+ // Part 2: Retrieve User Groups
401
+ // Query the sso_UserGroup table to find all active groups the user belongs to.
402
+ // Join with the sso_Group table to retrieve the GroupCode, GroupName, and InheritGroupSystemAccessYNfields.
403
+ // Ensure that the value of InheritGroupSystemAccessYN is explicitly 'Y' or 'N' for each group.
404
+ // If InheritGroupSystemAccessYN is not set, default it to 'N'.
405
+ // Return only active groups (based on Status field).
406
+ // The query should return the following fields for each group:
407
+ // GroupCode
408
+ // GroupName
409
+ // InheritGroupSystemAccessYN
410
+
411
+ const userGroups = await UserGroup._Repository.findAll({
412
+ where: {
413
+ UserId,
414
+ Status: 'Active',
415
+ },
416
+ include: [
417
+ {
418
+ model: GroupModel,
419
+ required: true,
420
+ where: {
421
+ Status: 'Active',
422
+ },
423
+ include: [
424
+ {
425
+ model: GroupSystemAccessModel,
426
+ where: {
427
+ Status: 'Active',
428
+ },
429
+ include: [
430
+ {
431
+ model: SystemModel,
432
+ },
433
+ ],
434
+ },
435
+ ],
436
+ },
437
+ ],
438
+ transaction: dbTransaction,
439
+ });
440
+ const result: {
441
+ UserGroupId: number;
442
+ GroupCode: string;
443
+ GroupName: string;
444
+ InheritGroupSystemAccessYN: string;
445
+ CreatedAt: Date;
446
+ UpdatedAt: Date;
447
+ Systems: {
448
+ SystemCode: string;
449
+ SystemName: string;
450
+ AccessStatus: string;
451
+ CreatedAt: Date;
452
+ UpdatedAt: Date;
453
+ }[];
454
+ }[] = [];
455
+ for (const userGroup of userGroups) {
456
+ // Part 3: Retrieve System Access for Groups with Inheritance
457
+ // For each group where InheritGroupSystemAccessYN = 'Y', query the sso_GroupSystemAccess table to retrieve system access details.
458
+ // Join with the sso_System table to fetch system details (SystemName, SystemCode).
459
+ // Ensure only active system accesses (AccessStatus = 'Active') are included.
460
+ // For each system access, retrieve the following fields:
461
+ // SystemName (from sso_System.Name)
462
+ // SystemCode (from sso_System.SystemCode)
463
+ // AccessStatus (from sso_GroupSystemAccess.Status)
464
+ // CreatedAt (from sso_GroupSystemAccess.CreatedAt)
465
+ // UpdatedAt (from sso_GroupSystemAccess.UpdatedAt)
466
+ // Part 4: Handling Non-Inherited Groups
467
+ // For groups where InheritGroupSystemAccessYN = 'N', return the group details without system access records.
468
+ // Set the Systems field to an empty array or null to indicate no inherited access for those groups.
469
+ // Part 5: Grouping Results
470
+ // Group the results by GroupCode and GroupName.
471
+ // For each group, create an object with the following structure:
472
+ // GroupCode: Code of the group.
473
+ // GroupName: Name of the group.
474
+ // InheritGroupSystemAccessYN: 'Y' or 'N', indicating whether the user inherits system access from the group.
475
+ // Systems: An array of system access objects (for groups where InheritGroupSystemAccessYN = 'Y'), each including:
476
+ // SystemName
477
+ // SystemCode
478
+ // AccessStatus
479
+ // CreatedAt
480
+ // UpdatedAt
481
+ // For groups where InheritGroupSystemAccessYN = 'N', Systems will be an empty array.
482
+ const groupData = {
483
+ UserGroupId: userGroup.UserGroupId,
484
+ GroupCode: userGroup.GroupCode,
485
+ GroupName: userGroup.Group.Name,
486
+ InheritGroupSystemAccessYN: userGroup.InheritGroupSystemAccessYN,
487
+ CreatedAt: userGroup.CreatedAt,
488
+ UpdatedAt: userGroup.UpdatedAt,
489
+ Systems: [],
490
+ };
491
+
492
+ if (userGroup.InheritGroupSystemAccessYN === 'Y') {
493
+ groupData.Systems = userGroup.Group.GroupSystemAccesses.map(
494
+ (groupSystemAccess) => {
495
+ return {
496
+ SystemCode: groupSystemAccess.System.SystemCode,
497
+ SystemName: groupSystemAccess.System.Name,
498
+ AccessStatus: groupSystemAccess.Status,
499
+ CreatedAt: groupSystemAccess.CreatedAt,
500
+ UpdatedAt: groupSystemAccess.UpdatedAt,
501
+ };
502
+ },
503
+ );
504
+ }
505
+
506
+ result.push(groupData);
507
+ }
508
+
509
+ // Part 6: Return Grouped Data
510
+ // Return the array of grouped system accesses for the user's groups, including both inherited ('Y') and non-inherited ('N') system accesses.
511
+ return result;
512
+ } catch (error) {
513
+ throw error;
514
+ }
515
+ }
516
+
517
+ public async update(
518
+ loginUser: LoginUser,
519
+ dbTransaction: Transaction,
520
+ UpdatedProperties: {
521
+ InheritGroupPrivilegeYN?: string;
522
+ InheritGroupSystemAccessYN?: string;
523
+ },
524
+ ): Promise<UserGroup> {
525
+ try {
526
+ // Part 1: Privilege Checking
527
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
528
+ // SystemCode: Retrieve from app config.
529
+ // PrivilegeCode: 'USER_GROUP_UPDATE'.
530
+ const systemCode =
531
+ ApplicationConfig.getComponentConfigValue('system-code');
532
+ const isPrivileged = await loginUser.checkPrivileges(
533
+ systemCode,
534
+ 'USER_GROUP_UPDATE',
535
+ );
536
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
537
+ if (!isPrivileged) {
538
+ throw new ClassError(
539
+ 'UserGroup',
540
+ 'UserGroupErrMsg0X',
541
+ 'User does not have privilege to update user group.',
542
+ 'update',
543
+ 403,
544
+ );
545
+ }
546
+ // Part 2: Validation
547
+ // Check to make sure that at least one of the UpdatedProperties is exist if not throw error.
548
+ if (
549
+ !UpdatedProperties.InheritGroupPrivilegeYN &&
550
+ !UpdatedProperties.InheritGroupSystemAccessYN
551
+ ) {
552
+ throw new ClassError(
553
+ 'UserGroup',
554
+ 'UserGroupErrMsg04',
555
+ 'At least one of the properties to update is required.',
556
+ 'update',
557
+ 400,
558
+ );
559
+ }
560
+ // Part 3: Update User Group
561
+ // Call the UserGroup._Repo.update() method to perform the update operation, passing:
562
+ // InheritGroupPrivilegeYN (if exist): updatedProperties.InheritGroupPrivilegeYN
563
+ // InheritGroupSystemAccessYN (if exist): updatedProperties.InheritGroupSystemAccessYN
564
+ // UpdatedById: loginUser.UserId (to indicate who updated the record).
565
+ // UpdatedAt: Set to the current date and time.
566
+ // dbTransaction: The database transaction instance.
567
+ const entityValueBefore = {
568
+ UserGroupId: this.UserGroupId,
569
+ UserId: this.UserId,
570
+ GroupCode: this.GroupCode,
571
+ Status: this.Status,
572
+ CreatedById: this._CreatedById,
573
+ CreatedAt: this._CreatedAt,
574
+ UpdatedById: this._UpdatedById,
575
+ UpdatedAt: this._UpdatedAt,
576
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
577
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
578
+ };
579
+
580
+ this._UpdatedById = loginUser.UserId;
581
+ this._UpdatedAt = new Date();
582
+ if (UpdatedProperties.InheritGroupPrivilegeYN) {
583
+ this.InheritGroupPrivilegeYN =
584
+ UpdatedProperties.InheritGroupPrivilegeYN;
585
+ }
586
+ if (UpdatedProperties.InheritGroupSystemAccessYN) {
587
+ this.InheritGroupSystemAccessYN =
588
+ UpdatedProperties.InheritGroupSystemAccessYN;
589
+ }
590
+
591
+ await UserGroup._Repository.update(
592
+ {
593
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
594
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
595
+ UpdatedById: this._UpdatedById,
596
+ UpdatedAt: this._UpdatedAt,
597
+ },
598
+ {
599
+ where: {
600
+ UserGroupId: this.UserGroupId,
601
+ },
602
+ transaction: dbTransaction,
603
+ },
604
+ );
605
+
606
+ // Part 2: Record Activity History
607
+ // Initialize a variable entityValueBefore to store the current state of the record before the update.
608
+ const entityValueAfter = {
609
+ UserGroupId: this.UserGroupId,
610
+ UserId: this.UserId,
611
+ GroupCode: this.GroupCode,
612
+ Status: this.Status,
613
+ CreatedById: this._CreatedById,
614
+ CreatedAt: this._CreatedAt,
615
+ UpdatedById: this._UpdatedById,
616
+ UpdatedAt: this._UpdatedAt,
617
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
618
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
619
+ };
620
+ // Create an instance of the Activity class and set the following properties:
621
+ // ActivityId: Call activity.createId().
622
+ // Action: Set to ActionEnum.Update.
623
+ // Description: Set to Update User Group.
624
+ // EntityType: Set to UserGroup.
625
+ // EntityId: Use the ID of the updated record.
626
+ // EntityValueBefore: Stringify entityValueBefore to capture the state before the update.
627
+ // EntityValueAfter: Stringify the updated record to capture the new state after the update.
628
+ const activity = new Activity();
629
+ activity.ActivityId = activity.createId();
630
+ activity.Action = ActionEnum.UPDATE;
631
+ activity.Description = 'Update User Group';
632
+ activity.EntityType = 'UserGroup';
633
+ activity.EntityId = this.UserGroupId.toString();
634
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
635
+ activity.EntityValueAfter = JSON.stringify(entityValueAfter);
636
+
637
+ // Call the activity create a method with the following parameters:
638
+ // dbTransaction
639
+ // userId: loginUser.UserId
640
+ // Part 3: Return Updated Record
641
+
642
+ await activity.create(loginUser.ObjectId, dbTransaction);
643
+ // Retrieve the updated user group record from the database or return the updated instance as needed.
644
+ return this;
645
+ } catch (error) {
646
+ throw error;
647
+ }
648
+ }
649
+
650
+ public static async isUserMemberOfGroup(
651
+ dbTransaction: any,
652
+ loginUser: LoginUser,
653
+ UserId: number,
654
+ GroupCode: string,
655
+ ): Promise<boolean> {
656
+ try {
657
+ // Part 1: Privilege Checking
658
+ // Call loginUser.checkPrivileges() to ensure the user has permission to retrieve system access information.
659
+ // SystemCode: Retrieve from app config.
660
+ // PrivilegeCode: 'USER_GROUP_VIEW'.
661
+ const systemCode =
662
+ ApplicationConfig.getComponentConfigValue('system-code');
663
+ const isPrivileged = await loginUser.checkPrivileges(
664
+ systemCode,
665
+ 'USER_GROUP_VIEW',
666
+ );
667
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
668
+ if (!isPrivileged) {
669
+ throw new ClassError(
670
+ 'UserGroup',
671
+ 'UserGroupErrMsg0X',
672
+ 'User does not have privilege to view user group.',
673
+ 'isUserMemberOfGroup',
674
+ 403,
675
+ );
676
+ }
677
+ // Part 2: Retrieve User Group
678
+ // Query the sso_UserGroup table to find the user group record with the given UserId and GroupCode.
679
+ // If the record exists, return true; otherwise, return false.
680
+ const userGroup = await UserGroup.findOne(
681
+ dbTransaction,
682
+ loginUser,
683
+ GroupCode,
684
+ UserId,
685
+ );
686
+ return !!userGroup;
687
+ } catch (error) {
688
+ throw error;
689
+ }
690
+ }
691
+
692
+ public async delete(
693
+ loginUser: LoginUser,
694
+ dbTransaction: Transaction,
695
+ ): Promise<void> {
696
+ try {
697
+ // Part 1: Privilege Checking
698
+ // Call loginUser.checkPrivileges() to ensure the user has permission to delete user group records.
699
+ // SystemCode: Retrieve from app config.
700
+ // PrivilegeCode: 'USER_GROUP_DELETE'.
701
+ const systemCode =
702
+ ApplicationConfig.getComponentConfigValue('system-code');
703
+ const isPrivileged = await loginUser.checkPrivileges(
704
+ systemCode,
705
+ 'USER_GROUP_DELETE',
706
+ );
707
+ // If the privilege check fails, throw an error with a 403 Forbidden status.
708
+ if (!isPrivileged) {
709
+ throw new ClassError(
710
+ 'UserGroup',
711
+ 'UserGroupErrMsg0X',
712
+ 'User does not have privilege to delete user group.',
713
+ 'delete',
714
+ 403,
715
+ );
716
+ }
717
+ // Part 2: Delete User Group
718
+ // Call the UserGroup._Repo.destroy() method to delete the user group record with the given UserGroupId.
719
+ // Pass the dbTransaction parameter to ensure the operation is part of the current transaction.
720
+ await UserGroup._Repository.delete({
721
+ where: {
722
+ UserGroupId: this.UserGroupId,
723
+ },
724
+ transaction: dbTransaction,
725
+ });
726
+ // Part 3: Record Activity History
727
+ // Initialize a variable entityValueBefore to store the current state of the record before the update.
728
+ const entityValueBefore = {
729
+ UserGroupId: this.UserGroupId,
730
+ UserId: this.UserId,
731
+ GroupCode: this.GroupCode,
732
+ Status: this.Status,
733
+ CreatedById: this._CreatedById,
734
+ CreatedAt: this._CreatedAt,
735
+ UpdatedById: this._UpdatedById,
736
+ UpdatedAt: this._UpdatedAt,
737
+ InheritGroupPrivilegeYN: this.InheritGroupPrivilegeYN,
738
+ InheritGroupSystemAccessYN: this.InheritGroupSystemAccessYN,
739
+ };
740
+ // Create an instance of the Activity class and set the following properties:
741
+ // ActivityId: Call activity.createId().
742
+ // Action: Set to ActionEnum.Delete.
743
+ // Description: Set to Delete User Group.
744
+ // EntityType: Set to UserGroup.
745
+ // EntityId: Use the ID of the deleted record.
746
+ // EntityValueBefore: Stringify entityValueBefore to capture the state before the delete.
747
+ // EntityValueAfter: Set to an empty string to indicate the record has been deleted.
748
+ const activity = new Activity();
749
+ activity.ActivityId = activity.createId();
750
+ activity.Action = ActionEnum.DELETE;
751
+ activity.Description = `Delete User Group ${this.UserGroupId}`;
752
+ activity.EntityType = 'UserGroup';
753
+ activity.EntityId = this.UserGroupId.toString();
754
+ activity.EntityValueBefore = JSON.stringify(entityValueBefore);
755
+ activity.EntityValueAfter = JSON.stringify({});
756
+ // Call the activity create method with the following parameters:
757
+ // dbTransaction
758
+ // userId: loginUser.UserId
759
+ await activity.create(loginUser.ObjectId, dbTransaction);
760
+ } catch (error) {
761
+ throw error;
762
+ }
763
+ }
764
+ }