@tomei/sso 0.46.6 → 0.46.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.commitlintrc.json +22 -22
- package/.eslintrc +16 -16
- package/.eslintrc.js +35 -35
- package/.gitlab-ci.yml +16 -16
- package/.husky/commit-msg +15 -15
- package/.husky/pre-commit +7 -7
- package/.prettierrc +4 -4
- package/Jenkinsfile +57 -57
- package/README.md +23 -23
- package/__tests__/unit/components/group/group.spec.ts +79 -79
- package/__tests__/unit/components/group-object-privilege/group-object-privilege.spec.ts +88 -88
- package/__tests__/unit/components/group-privilege/group-privilege.spec.ts +68 -68
- package/__tests__/unit/components/group-reporting-user/group-reporting-user.spec.ts +66 -66
- package/__tests__/unit/components/group-system-access/group-system-access.spec.ts +83 -83
- package/__tests__/unit/components/login-user/l.spec.ts +746 -746
- package/__tests__/unit/components/login-user/login.spec.ts +1164 -1164
- package/__tests__/unit/components/password-hash/password-hash.service.spec.ts +31 -31
- package/__tests__/unit/components/system/system.spec.ts +254 -254
- package/__tests__/unit/components/system-privilege/system-privilege.spec.ts +83 -83
- package/__tests__/unit/components/user-group/user-group.spec.ts +86 -86
- package/__tests__/unit/components/user-object-privilege/user-object-privilege.spec.ts +78 -78
- package/__tests__/unit/components/user-privilege/user-privilege.spec.ts +72 -72
- package/__tests__/unit/components/user-system-access/user-system-access.spec.ts +89 -89
- package/__tests__/unit/redis-client/redis.service.spec.ts +23 -23
- package/__tests__/unit/session/session.service.spec.ts +47 -47
- package/__tests__/unit/system-privilege/system-privilage.spec.ts +91 -91
- package/coverage/clover.xml +1452 -1452
- package/coverage/coverage-final.json +47 -47
- package/coverage/lcov-report/base.css +224 -224
- package/coverage/lcov-report/block-navigation.js +87 -87
- package/coverage/lcov-report/components/group/group.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group/group.ts.html +327 -327
- package/coverage/lcov-report/components/group/index.html +130 -130
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-object-privilege/group-object-privilege.ts.html +321 -321
- package/coverage/lcov-report/components/group-object-privilege/index.html +130 -130
- package/coverage/lcov-report/components/group-privilege/group-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-privilege/group-privilege.ts.html +303 -303
- package/coverage/lcov-report/components/group-privilege/index.html +130 -130
- package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-reporting-user/group-reporting-user.ts.html +327 -327
- package/coverage/lcov-report/components/group-reporting-user/index.html +130 -130
- package/coverage/lcov-report/components/group-system-access/group-system-access.repository.ts.html +117 -117
- package/coverage/lcov-report/components/group-system-access/group-system-access.ts.html +309 -309
- package/coverage/lcov-report/components/group-system-access/index.html +130 -130
- package/coverage/lcov-report/components/login-history/index.html +115 -115
- package/coverage/lcov-report/components/login-history/login-history.repository.ts.html +117 -117
- package/coverage/lcov-report/components/login-user/index.html +130 -130
- package/coverage/lcov-report/components/login-user/login-user.ts.html +5007 -5007
- package/coverage/lcov-report/components/login-user/user.repository.ts.html +117 -117
- package/coverage/lcov-report/components/password-hash/index.html +115 -115
- package/coverage/lcov-report/components/password-hash/password-hash.service.ts.html +126 -126
- package/coverage/lcov-report/components/system/index.html +130 -130
- package/coverage/lcov-report/components/system/system.repository.ts.html +117 -117
- package/coverage/lcov-report/components/system/system.ts.html +909 -909
- package/coverage/lcov-report/components/system-privilege/index.html +130 -130
- package/coverage/lcov-report/components/system-privilege/system-privilege.repository.ts.html +120 -120
- package/coverage/lcov-report/components/system-privilege/system-privilege.ts.html +390 -390
- package/coverage/lcov-report/components/user-group/index.html +130 -130
- package/coverage/lcov-report/components/user-group/user-group.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-group/user-group.ts.html +354 -354
- package/coverage/lcov-report/components/user-object-privilege/index.html +130 -130
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-object-privilege/user-object-privilege.ts.html +312 -312
- package/coverage/lcov-report/components/user-privilege/index.html +130 -130
- package/coverage/lcov-report/components/user-privilege/user-privilege.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-privilege/user-privilege.ts.html +306 -306
- package/coverage/lcov-report/components/user-system-access/index.html +130 -130
- package/coverage/lcov-report/components/user-system-access/user-system-access.repository.ts.html +117 -117
- package/coverage/lcov-report/components/user-system-access/user-system-access.ts.html +312 -312
- package/coverage/lcov-report/enum/group-type.enum.ts.html +108 -108
- package/coverage/lcov-report/enum/index.html +160 -160
- package/coverage/lcov-report/enum/index.ts.html +93 -93
- package/coverage/lcov-report/enum/user-status.enum.ts.html +105 -105
- package/coverage/lcov-report/enum/yn.enum.ts.html +96 -96
- package/coverage/lcov-report/index.html +370 -370
- package/coverage/lcov-report/models/group-object-privilege.entity.ts.html +333 -333
- package/coverage/lcov-report/models/group-privilege.entity.ts.html +315 -315
- package/coverage/lcov-report/models/group-reporting-user.entity.ts.html +339 -339
- package/coverage/lcov-report/models/group-system-access.entity.ts.html +324 -324
- package/coverage/lcov-report/models/group.entity.ts.html +435 -435
- package/coverage/lcov-report/models/index.html +310 -310
- package/coverage/lcov-report/models/login-history.entity.ts.html +252 -252
- package/coverage/lcov-report/models/staff.entity.ts.html +411 -411
- package/coverage/lcov-report/models/system-privilege.entity.ts.html +354 -354
- package/coverage/lcov-report/models/system.entity.ts.html +423 -423
- package/coverage/lcov-report/models/user-group.entity.ts.html +354 -354
- package/coverage/lcov-report/models/user-object-privilege.entity.ts.html +330 -330
- package/coverage/lcov-report/models/user-privilege.entity.ts.html +315 -315
- package/coverage/lcov-report/models/user-system-access.entity.ts.html +315 -315
- package/coverage/lcov-report/models/user.entity.ts.html +522 -522
- package/coverage/lcov-report/prettify.css +1 -1
- package/coverage/lcov-report/prettify.js +2 -2
- package/coverage/lcov-report/redis-client/index.html +115 -115
- package/coverage/lcov-report/redis-client/redis.service.ts.html +240 -240
- package/coverage/lcov-report/session/index.html +115 -115
- package/coverage/lcov-report/session/session.service.ts.html +246 -246
- package/coverage/lcov-report/sorter.js +196 -196
- package/coverage/lcov.info +2490 -2490
- package/coverage/test-report.xml +128 -128
- package/create-sso-user.sql +39 -39
- package/dist/src/components/user-system-access/user-system-access.d.ts +2 -0
- package/dist/src/components/user-system-access/user-system-access.js +57 -0
- package/dist/src/components/user-system-access/user-system-access.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/jest.config.js +14 -14
- package/migrations/20240314080602-create-user-table.js +124 -124
- package/migrations/20240314080603-create-user-group-table.js +85 -85
- package/migrations/20240314080604-create-user-user-group-table.js +55 -55
- package/migrations/20240314080605-create-login-history-table.js +53 -53
- package/migrations/20240527064925-create-system-table.js +78 -78
- package/migrations/20240527064926-create-system-privilege-table.js +71 -71
- package/migrations/20240527065342-create-group-table.js +93 -93
- package/migrations/20240527065633-create-group-reporting-user-table.js +76 -76
- package/migrations/20240528011551-create-group-system-access-table.js +72 -72
- package/migrations/20240528023018-user-system-access-table.js +75 -75
- package/migrations/20240528032229-user-privilege-table.js +75 -75
- package/migrations/20240528063003-create-group-privilege-table.js +85 -85
- package/migrations/20240528063051-create-group-object-privilege-table.js +84 -84
- package/migrations/20240528063107-create-user-object-privilege-table.js +83 -83
- package/migrations/20240528063108-create-api-key-table.js +85 -85
- package/package.json +89 -89
- package/sampledotenv +7 -7
- package/sonar-project.properties +22 -22
- package/src/components/user-system-access/user-system-access.ts +123 -0
- package/tsconfig.build.json +5 -5
- package/tsconfig.json +22 -22
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.d.ts +0 -1
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js +0 -71
- package/dist/__tests__/unit/components/group-privilege/group-privilege.test.js.map +0 -1
- package/dist/__tests__/unit/components/login-user/login-user.spec.d.ts +0 -0
- package/dist/__tests__/unit/components/login-user/login-user.spec.js +0 -6
- package/dist/__tests__/unit/components/login-user/login-user.spec.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,89 +1,89 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@tomei/sso",
|
|
3
|
-
"version": "0.46.
|
|
4
|
-
"description": "Tomei SSO Package",
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"start:dev": "tsc -w",
|
|
8
|
-
"build": "tsc",
|
|
9
|
-
"prepare": "husky install",
|
|
10
|
-
"format": "prettier --write \"src/**/*.ts\"",
|
|
11
|
-
"lint": "npx eslint . --fix",
|
|
12
|
-
"test": "jest --forceExit --detectOpenHandles --coverage"
|
|
13
|
-
},
|
|
14
|
-
"repository": {
|
|
15
|
-
"type": "git",
|
|
16
|
-
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
|
17
|
-
},
|
|
18
|
-
"keywords": [
|
|
19
|
-
"tomei",
|
|
20
|
-
"sso"
|
|
21
|
-
],
|
|
22
|
-
"author": "Tomei",
|
|
23
|
-
"license": "ISC",
|
|
24
|
-
"bugs": {
|
|
25
|
-
"url": "https://gitlab.com/tomei-package/sso/issues"
|
|
26
|
-
},
|
|
27
|
-
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"@commitlint/cli": "^17.6.3",
|
|
30
|
-
"@commitlint/config-conventional": "^17.6.3",
|
|
31
|
-
"@tsconfig/node18": "^2.0.1",
|
|
32
|
-
"@types/bcrypt": "^5.0.0",
|
|
33
|
-
"@types/jest": "^29.5.2",
|
|
34
|
-
"@types/node": "^18.17.5",
|
|
35
|
-
"@types/redis": "^4.0.11",
|
|
36
|
-
"@types/validator": "^13.11.1",
|
|
37
|
-
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
|
38
|
-
"@typescript-eslint/parser": "^5.0.0",
|
|
39
|
-
"dotenv": "^16.1.4",
|
|
40
|
-
"eslint": "^8.40.0",
|
|
41
|
-
"eslint-config-prettier": "^8.5.0",
|
|
42
|
-
"eslint-plugin-prettier": "^4.2.1",
|
|
43
|
-
"husky": "^8.0.3",
|
|
44
|
-
"jest": "^29.5.0",
|
|
45
|
-
"jest-mock-extended": "^3.0.4",
|
|
46
|
-
"jest-sonar-reporter": "^2.0.0",
|
|
47
|
-
"lint-staged": "^13.2.2",
|
|
48
|
-
"prettier": "^2.7.1",
|
|
49
|
-
"prisma": "^4.14.0",
|
|
50
|
-
"redis-mock": "^0.56.3",
|
|
51
|
-
"sequelize-cli": "^6.6.2",
|
|
52
|
-
"ts-jest": "^29.1.0",
|
|
53
|
-
"ts-node": "^10.9.1",
|
|
54
|
-
"tsc-watch": "^5.0.3",
|
|
55
|
-
"tsconfig-paths": "^4.0.0",
|
|
56
|
-
"tslint": "^6.1.3",
|
|
57
|
-
"typescript": "^4.7.4"
|
|
58
|
-
},
|
|
59
|
-
"publishConfig": {
|
|
60
|
-
"access": "public"
|
|
61
|
-
},
|
|
62
|
-
"peerDependencies": {
|
|
63
|
-
"@tomei/activity-history": "^0.2.19",
|
|
64
|
-
"@tomei/config": "^0.3.12",
|
|
65
|
-
"@tomei/general": "^0.15.2",
|
|
66
|
-
"@tomei/mailer": "^0.5.15",
|
|
67
|
-
"argon2": "^0.30.3",
|
|
68
|
-
"cls-hooked": "^4.2.2",
|
|
69
|
-
"cuid": "^3.0.0",
|
|
70
|
-
"nodemailer": "^6.9.3",
|
|
71
|
-
"redis": "^4.6.7",
|
|
72
|
-
"reflect-metadata": "^0.1.13",
|
|
73
|
-
"sequelize": "^6.37.3",
|
|
74
|
-
"sequelize-typescript": "^2.1.6",
|
|
75
|
-
"speakeasy": "^2.0.0",
|
|
76
|
-
"uuid": "^10.0.0"
|
|
77
|
-
},
|
|
78
|
-
"lint-staged": {
|
|
79
|
-
"*/**/*.{js,ts,tsx}": [
|
|
80
|
-
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
81
|
-
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
|
82
|
-
]
|
|
83
|
-
},
|
|
84
|
-
"jestSonar": {
|
|
85
|
-
"reportPath": "coverage",
|
|
86
|
-
"reportFile": "test-report.xml",
|
|
87
|
-
"indent": 2
|
|
88
|
-
}
|
|
89
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@tomei/sso",
|
|
3
|
+
"version": "0.46.7",
|
|
4
|
+
"description": "Tomei SSO Package",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"start:dev": "tsc -w",
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"prepare": "husky install",
|
|
10
|
+
"format": "prettier --write \"src/**/*.ts\"",
|
|
11
|
+
"lint": "npx eslint . --fix",
|
|
12
|
+
"test": "jest --forceExit --detectOpenHandles --coverage"
|
|
13
|
+
},
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "git+ssh://git@gitlab.com/tomei-package/sso.git"
|
|
17
|
+
},
|
|
18
|
+
"keywords": [
|
|
19
|
+
"tomei",
|
|
20
|
+
"sso"
|
|
21
|
+
],
|
|
22
|
+
"author": "Tomei",
|
|
23
|
+
"license": "ISC",
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://gitlab.com/tomei-package/sso/issues"
|
|
26
|
+
},
|
|
27
|
+
"homepage": "https://gitlab.com/tomei-package/sso#readme",
|
|
28
|
+
"devDependencies": {
|
|
29
|
+
"@commitlint/cli": "^17.6.3",
|
|
30
|
+
"@commitlint/config-conventional": "^17.6.3",
|
|
31
|
+
"@tsconfig/node18": "^2.0.1",
|
|
32
|
+
"@types/bcrypt": "^5.0.0",
|
|
33
|
+
"@types/jest": "^29.5.2",
|
|
34
|
+
"@types/node": "^18.17.5",
|
|
35
|
+
"@types/redis": "^4.0.11",
|
|
36
|
+
"@types/validator": "^13.11.1",
|
|
37
|
+
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
|
38
|
+
"@typescript-eslint/parser": "^5.0.0",
|
|
39
|
+
"dotenv": "^16.1.4",
|
|
40
|
+
"eslint": "^8.40.0",
|
|
41
|
+
"eslint-config-prettier": "^8.5.0",
|
|
42
|
+
"eslint-plugin-prettier": "^4.2.1",
|
|
43
|
+
"husky": "^8.0.3",
|
|
44
|
+
"jest": "^29.5.0",
|
|
45
|
+
"jest-mock-extended": "^3.0.4",
|
|
46
|
+
"jest-sonar-reporter": "^2.0.0",
|
|
47
|
+
"lint-staged": "^13.2.2",
|
|
48
|
+
"prettier": "^2.7.1",
|
|
49
|
+
"prisma": "^4.14.0",
|
|
50
|
+
"redis-mock": "^0.56.3",
|
|
51
|
+
"sequelize-cli": "^6.6.2",
|
|
52
|
+
"ts-jest": "^29.1.0",
|
|
53
|
+
"ts-node": "^10.9.1",
|
|
54
|
+
"tsc-watch": "^5.0.3",
|
|
55
|
+
"tsconfig-paths": "^4.0.0",
|
|
56
|
+
"tslint": "^6.1.3",
|
|
57
|
+
"typescript": "^4.7.4"
|
|
58
|
+
},
|
|
59
|
+
"publishConfig": {
|
|
60
|
+
"access": "public"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"@tomei/activity-history": "^0.2.19",
|
|
64
|
+
"@tomei/config": "^0.3.12",
|
|
65
|
+
"@tomei/general": "^0.15.2",
|
|
66
|
+
"@tomei/mailer": "^0.5.15",
|
|
67
|
+
"argon2": "^0.30.3",
|
|
68
|
+
"cls-hooked": "^4.2.2",
|
|
69
|
+
"cuid": "^3.0.0",
|
|
70
|
+
"nodemailer": "^6.9.3",
|
|
71
|
+
"redis": "^4.6.7",
|
|
72
|
+
"reflect-metadata": "^0.1.13",
|
|
73
|
+
"sequelize": "^6.37.3",
|
|
74
|
+
"sequelize-typescript": "^2.1.6",
|
|
75
|
+
"speakeasy": "^2.0.0",
|
|
76
|
+
"uuid": "^10.0.0"
|
|
77
|
+
},
|
|
78
|
+
"lint-staged": {
|
|
79
|
+
"*/**/*.{js,ts,tsx}": [
|
|
80
|
+
"prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
81
|
+
"eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"jestSonar": {
|
|
85
|
+
"reportPath": "coverage",
|
|
86
|
+
"reportFile": "test-report.xml",
|
|
87
|
+
"indent": 2
|
|
88
|
+
}
|
|
89
|
+
}
|
package/sampledotenv
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
DATABASE_URL=
|
|
2
|
-
SHADOW_DATABASE_URL=
|
|
3
|
-
REDIS_URL=
|
|
4
|
-
REDIS_PASSWORD=
|
|
5
|
-
SMTP_HOST=
|
|
6
|
-
SMTP_PORT=
|
|
7
|
-
EMAIL_SENDER=
|
|
1
|
+
DATABASE_URL=
|
|
2
|
+
SHADOW_DATABASE_URL=
|
|
3
|
+
REDIS_URL=
|
|
4
|
+
REDIS_PASSWORD=
|
|
5
|
+
SMTP_HOST=
|
|
6
|
+
SMTP_PORT=
|
|
7
|
+
EMAIL_SENDER=
|
|
8
8
|
EMAIL_PASSWORD=
|
package/sonar-project.properties
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
sonar.projectKey=all-tomei-projects_sso
|
|
2
|
-
sonar.organization=all-tomei-projects
|
|
3
|
-
sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
|
|
4
|
-
sonar.scm.provider=git
|
|
5
|
-
|
|
6
|
-
sonar.sources=src
|
|
7
|
-
sonar.test=__tests__
|
|
8
|
-
sonar.test.inclusions=src/**/*.spec.ts
|
|
9
|
-
|
|
10
|
-
sonar.javascript.lcov.reportPaths=./coverage/lcov.info
|
|
11
|
-
sonar.testExecutionReportPaths=coverage/test-report.xml
|
|
12
|
-
sonar.sourceEnconding=UTF-8
|
|
13
|
-
|
|
14
|
-
# This is the name and version displayed in the SonarCloud UI.
|
|
15
|
-
#sonar.projectName=sso
|
|
16
|
-
#sonar.projectVersion=1.0
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
|
20
|
-
#sonar.sources=.
|
|
21
|
-
|
|
22
|
-
# Encoding of the source code. Default is default system encoding
|
|
1
|
+
sonar.projectKey=all-tomei-projects_sso
|
|
2
|
+
sonar.organization=all-tomei-projects
|
|
3
|
+
sonar.exclusions=**/*.js,test-data,dist,coverage, node_modules, __tests__, **/*.spec.ts, __mocks__
|
|
4
|
+
sonar.scm.provider=git
|
|
5
|
+
|
|
6
|
+
sonar.sources=src
|
|
7
|
+
sonar.test=__tests__
|
|
8
|
+
sonar.test.inclusions=src/**/*.spec.ts
|
|
9
|
+
|
|
10
|
+
sonar.javascript.lcov.reportPaths=./coverage/lcov.info
|
|
11
|
+
sonar.testExecutionReportPaths=coverage/test-report.xml
|
|
12
|
+
sonar.sourceEnconding=UTF-8
|
|
13
|
+
|
|
14
|
+
# This is the name and version displayed in the SonarCloud UI.
|
|
15
|
+
#sonar.projectName=sso
|
|
16
|
+
#sonar.projectVersion=1.0
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
|
|
20
|
+
#sonar.sources=.
|
|
21
|
+
|
|
22
|
+
# Encoding of the source code. Default is default system encoding
|
|
23
23
|
#sonar.sourceEncoding=UTF-8
|
|
@@ -6,6 +6,8 @@ import { System } from '../system/system';
|
|
|
6
6
|
import { ApplicationConfig } from '@tomei/config';
|
|
7
7
|
import SystemModel from '../../models/system.entity';
|
|
8
8
|
import UserModel from '../../models/user.entity';
|
|
9
|
+
import { ActionEnum, Activity } from '@tomei/activity-history';
|
|
10
|
+
import { Op } from 'sequelize';
|
|
9
11
|
|
|
10
12
|
export class UserSystemAccess extends ObjectBase {
|
|
11
13
|
ObjectType = 'UserSystemAccess';
|
|
@@ -85,6 +87,7 @@ export class UserSystemAccess extends ObjectBase {
|
|
|
85
87
|
whereOption: {
|
|
86
88
|
//An object containing filter criteria, specifically:
|
|
87
89
|
UserId: number; //The ID of the user whose system access records are to be retrieved.
|
|
90
|
+
SystemCode?: string;
|
|
88
91
|
},
|
|
89
92
|
pagination: {
|
|
90
93
|
//An object containing pagination parameters:
|
|
@@ -178,4 +181,124 @@ export class UserSystemAccess extends ObjectBase {
|
|
|
178
181
|
throw error;
|
|
179
182
|
}
|
|
180
183
|
}
|
|
184
|
+
|
|
185
|
+
public static async createAccess(
|
|
186
|
+
loginUser: User, //The currently logged-in user initiating the request.
|
|
187
|
+
dbTransaction: any, //The active database transaction to ensure consistency during the query.
|
|
188
|
+
UserId: string, //The user ID for whom system access is being created.
|
|
189
|
+
SystemCode: string, //The system code for which access is being granted.
|
|
190
|
+
Status: string, //The status of access ('Active' or 'Inactive').
|
|
191
|
+
) {
|
|
192
|
+
try {
|
|
193
|
+
// Part 1: Privilege Checking:
|
|
194
|
+
// Call loginUser.checkPrivileges() method by passing:
|
|
195
|
+
// SystemCode: Retrieve from app config.
|
|
196
|
+
// PrivilegeCode: 'USER_SYSTEM_ACCESS_CREATE'.
|
|
197
|
+
const systemCode =
|
|
198
|
+
ApplicationConfig.getComponentConfigValue('system-code');
|
|
199
|
+
const privilegeCode = 'USER_SYSTEM_ACCESS_CREATE';
|
|
200
|
+
const isPrivileged = await loginUser.checkPrivileges(
|
|
201
|
+
systemCode,
|
|
202
|
+
privilegeCode,
|
|
203
|
+
);
|
|
204
|
+
if (!isPrivileged) {
|
|
205
|
+
throw new ClassError(
|
|
206
|
+
'UserSystemAccess',
|
|
207
|
+
'UserSystemAccessErrMsg01',
|
|
208
|
+
'You do not have permission to access this resource.',
|
|
209
|
+
);
|
|
210
|
+
}
|
|
211
|
+
// Part 2: Validation for Existing Access
|
|
212
|
+
// Use the UserSystemAccess.findAll() method to check if the user already has access to the specified system:
|
|
213
|
+
// Pass the following parameters:
|
|
214
|
+
// loginUser
|
|
215
|
+
// dbTransaction
|
|
216
|
+
// whereOption: set to UserId = UserId and SystemCode = SystemCode.
|
|
217
|
+
// If a record is found, throw an error indicating that access for this user and system already exists.
|
|
218
|
+
|
|
219
|
+
const isExist = await UserSystemAccess._Repository.findAll({
|
|
220
|
+
where: { [Op.and]: [{ UserId: UserId }, { SystemCode: SystemCode }] },
|
|
221
|
+
transaction: dbTransaction,
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
if (isExist?.length > 0) {
|
|
225
|
+
throw new ClassError(
|
|
226
|
+
'UserSystemAccess',
|
|
227
|
+
'UserSystemAccessErrMsg01',
|
|
228
|
+
'User already have access to this system',
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
// Part 3: Insert System Access Record
|
|
233
|
+
// After successful validation, create a new instance of UserSystemAccess with the following fields:
|
|
234
|
+
// - UserId: set to the UserId parameter.
|
|
235
|
+
// - SystemCode: set to the SystemCode parameter.
|
|
236
|
+
// - Status: set to the Status parameter.
|
|
237
|
+
// - CreatedById: set to loginUser.UserId.
|
|
238
|
+
// - CreatedAt: set to the current timestamp.
|
|
239
|
+
// - UpdatedById: set to loginUser.UserId.
|
|
240
|
+
// - UpdatedAt: set to the current timestamp (same as CreatedAt).
|
|
241
|
+
// Save the new UserSystemAccess instance in the database within the dbTransaction.
|
|
242
|
+
|
|
243
|
+
const newUserSystemAccess = new UserSystemAccess();
|
|
244
|
+
newUserSystemAccess.UserId = parseInt(UserId);
|
|
245
|
+
newUserSystemAccess.SystemCode = SystemCode;
|
|
246
|
+
newUserSystemAccess.Status = Status;
|
|
247
|
+
newUserSystemAccess._CreatedById = loginUser.UserId;
|
|
248
|
+
newUserSystemAccess._CreatedAt = new Date();
|
|
249
|
+
newUserSystemAccess._UpdatedById = loginUser.UserId;
|
|
250
|
+
newUserSystemAccess._UpdatedAt = new Date();
|
|
251
|
+
|
|
252
|
+
const payload = {
|
|
253
|
+
UserId: newUserSystemAccess.UserId,
|
|
254
|
+
SystemCode: newUserSystemAccess.SystemCode,
|
|
255
|
+
Status: newUserSystemAccess.Status,
|
|
256
|
+
CreatedById: newUserSystemAccess.CreatedById,
|
|
257
|
+
CreatedAt: newUserSystemAccess.CreatedAt,
|
|
258
|
+
UpdatedById: newUserSystemAccess.UpdatedById,
|
|
259
|
+
UpdatedAt: newUserSystemAccess.UpdatedAt,
|
|
260
|
+
};
|
|
261
|
+
|
|
262
|
+
const systemAccess = await UserSystemAccess._Repository.create(payload, {
|
|
263
|
+
transaction: dbTransaction,
|
|
264
|
+
});
|
|
265
|
+
|
|
266
|
+
// Part 4: Record Activity History
|
|
267
|
+
// Initialize an empty object ({}) as EntityValueBefore.
|
|
268
|
+
// Set EntityValueAfter to the stringified version of the newly created UserSystemAccess instance.
|
|
269
|
+
// Create a new activity log entry:
|
|
270
|
+
// ActivityId: auto-generated by calling activity.createId().
|
|
271
|
+
// Action: set to ActionEnum.Create.
|
|
272
|
+
// Description: set to "Create User System Access".
|
|
273
|
+
// EntityType: set to UserSystemAccess.
|
|
274
|
+
// EntityId: set to the newly created UserSystemAccess.UserSystemAccessId.
|
|
275
|
+
// EntityValueBefore: set to {} (empty).
|
|
276
|
+
// EntityValueAfter: set to the stringified version of the new access record.
|
|
277
|
+
// Call the activity.create() method, passing:
|
|
278
|
+
// dbTransaction
|
|
279
|
+
// userId: set to loginUser.UserId.
|
|
280
|
+
|
|
281
|
+
const entityValueBefore = {};
|
|
282
|
+
|
|
283
|
+
//Instantiate new activity
|
|
284
|
+
const activity = new Activity();
|
|
285
|
+
activity.ActivityId = activity.createId();
|
|
286
|
+
activity.Action = ActionEnum.CREATE;
|
|
287
|
+
activity.Description = 'Create User System Access';
|
|
288
|
+
activity.EntityType = 'UserSystemAccess';
|
|
289
|
+
activity.EntityId = systemAccess.UserSystemAccessId?.toString();
|
|
290
|
+
activity.EntityValueBefore = JSON.stringify(entityValueBefore);
|
|
291
|
+
activity.EntityValueAfter = JSON.stringify(payload);
|
|
292
|
+
|
|
293
|
+
//Call Activity.create method
|
|
294
|
+
await activity.create(loginUser.ObjectId, dbTransaction);
|
|
295
|
+
|
|
296
|
+
// Part 5: Return Newly Created Record
|
|
297
|
+
// Return the newly created UserSystemAccess instance with all relevant fields, including UserSystemAccessId, SystemCode, Status, CreatedAt, and CreatedById.
|
|
298
|
+
newUserSystemAccess.UserSystemAccessId = systemAccess.UserSystemAccessId;
|
|
299
|
+
return newUserSystemAccess;
|
|
300
|
+
} catch (error) {
|
|
301
|
+
throw error;
|
|
302
|
+
}
|
|
303
|
+
}
|
|
181
304
|
}
|
package/tsconfig.build.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./tsconfig.json",
|
|
3
|
-
"include": ["**/*.ts"],
|
|
4
|
-
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
|
5
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"include": ["**/*.ts"],
|
|
4
|
+
"exclude": ["node_modules", "__tests__", "dist", "**/*spec.ts"]
|
|
5
|
+
}
|
|
6
6
|
|
package/tsconfig.json
CHANGED
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"module": "commonjs",
|
|
4
|
-
"declaration": true,
|
|
5
|
-
"removeComments": true,
|
|
6
|
-
"emitDecoratorMetadata": true,
|
|
7
|
-
"experimentalDecorators": true,
|
|
8
|
-
"allowSyntheticDefaultImports": true,
|
|
9
|
-
"moduleResolution": "node",
|
|
10
|
-
"target": "es6",
|
|
11
|
-
"sourceMap": true,
|
|
12
|
-
"outDir": "./dist",
|
|
13
|
-
"baseUrl": "./src",
|
|
14
|
-
"rootDir": "./",
|
|
15
|
-
"incremental": true,
|
|
16
|
-
"skipLibCheck": true,
|
|
17
|
-
"noImplicitAny": false,
|
|
18
|
-
"strictBindCallApply": false,
|
|
19
|
-
"forceConsistentCasingInFileNames": false,
|
|
20
|
-
"noFallthroughCasesInSwitch": false,
|
|
21
|
-
"strictNullChecks": false,
|
|
22
|
-
},
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"module": "commonjs",
|
|
4
|
+
"declaration": true,
|
|
5
|
+
"removeComments": true,
|
|
6
|
+
"emitDecoratorMetadata": true,
|
|
7
|
+
"experimentalDecorators": true,
|
|
8
|
+
"allowSyntheticDefaultImports": true,
|
|
9
|
+
"moduleResolution": "node",
|
|
10
|
+
"target": "es6",
|
|
11
|
+
"sourceMap": true,
|
|
12
|
+
"outDir": "./dist",
|
|
13
|
+
"baseUrl": "./src",
|
|
14
|
+
"rootDir": "./",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"skipLibCheck": true,
|
|
17
|
+
"noImplicitAny": false,
|
|
18
|
+
"strictBindCallApply": false,
|
|
19
|
+
"forceConsistentCasingInFileNames": false,
|
|
20
|
+
"noFallthroughCasesInSwitch": false,
|
|
21
|
+
"strictNullChecks": false,
|
|
22
|
+
},
|
|
23
23
|
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
const group_privilege_1 = require("../../../../src/components/group-privilege/group-privilege");
|
|
13
|
-
const group_privilege_repository_1 = require("../../../../src/components/group-privilege/group-privilege.repository");
|
|
14
|
-
const general_1 = require("@tomei/general");
|
|
15
|
-
describe('GroupPrivilege', () => {
|
|
16
|
-
afterEach(() => {
|
|
17
|
-
jest.restoreAllMocks();
|
|
18
|
-
});
|
|
19
|
-
it('should initialize with GroupPrivilegeAttr', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
-
const mockGroupPrivilegeAttr = {
|
|
21
|
-
GroupPrivilegeId: 1,
|
|
22
|
-
GroupCode: 'group1',
|
|
23
|
-
PrivilegeCode: 'privilege1',
|
|
24
|
-
Status: 'active',
|
|
25
|
-
CreatedAt: new Date(),
|
|
26
|
-
UpdatedAt: new Date(),
|
|
27
|
-
CreatedById: 1,
|
|
28
|
-
UpdatedById: 1,
|
|
29
|
-
};
|
|
30
|
-
const findOneMock = jest
|
|
31
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
|
32
|
-
.mockResolvedValueOnce({ get: jest.fn().mockReturnValue(mockGroupPrivilegeAttr) });
|
|
33
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init(null, 1);
|
|
34
|
-
expect(findOneMock).toBeCalledWith({
|
|
35
|
-
where: { GroupPrivilegeId: 1 },
|
|
36
|
-
transaction: null,
|
|
37
|
-
});
|
|
38
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
|
39
|
-
expect(groupPrivilege.GroupPrivilegeId).toEqual(mockGroupPrivilegeAttr.GroupPrivilegeId);
|
|
40
|
-
expect(groupPrivilege.GroupCode).toEqual(mockGroupPrivilegeAttr.GroupCode);
|
|
41
|
-
expect(groupPrivilege.PrivilegeCode).toEqual(mockGroupPrivilegeAttr.PrivilegeCode);
|
|
42
|
-
expect(groupPrivilege.Status).toEqual(mockGroupPrivilegeAttr.Status);
|
|
43
|
-
expect(groupPrivilege.CreatedAt).toEqual(mockGroupPrivilegeAttr.CreatedAt);
|
|
44
|
-
expect(groupPrivilege.UpdatedAt).toEqual(mockGroupPrivilegeAttr.UpdatedAt);
|
|
45
|
-
expect(groupPrivilege.CreatedById).toEqual(mockGroupPrivilegeAttr.CreatedById);
|
|
46
|
-
expect(groupPrivilege.UpdatedById).toEqual(mockGroupPrivilegeAttr.UpdatedById);
|
|
47
|
-
}));
|
|
48
|
-
it('should throw ClassError when GroupPrivilegeAttr is not found', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
49
|
-
const findOneMock = jest
|
|
50
|
-
.spyOn(group_privilege_repository_1.GroupPrivilegeRepository.prototype, 'findOne')
|
|
51
|
-
.mockResolvedValueOnce(null);
|
|
52
|
-
yield expect(group_privilege_1.GroupPrivilege.init(null, 1)).rejects.toThrow(general_1.ClassError);
|
|
53
|
-
expect(findOneMock).toBeCalledWith({
|
|
54
|
-
where: { GroupPrivilegeId: 1 },
|
|
55
|
-
transaction: null,
|
|
56
|
-
});
|
|
57
|
-
}));
|
|
58
|
-
it('should initialize with default values', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
59
|
-
const groupPrivilege = yield group_privilege_1.GroupPrivilege.init();
|
|
60
|
-
expect(groupPrivilege).toBeInstanceOf(group_privilege_1.GroupPrivilege);
|
|
61
|
-
expect(groupPrivilege.GroupPrivilegeId).toBeUndefined();
|
|
62
|
-
expect(groupPrivilege.GroupCode).toBeUndefined();
|
|
63
|
-
expect(groupPrivilege.PrivilegeCode).toBeUndefined();
|
|
64
|
-
expect(groupPrivilege.Status).toBeUndefined();
|
|
65
|
-
expect(groupPrivilege.CreatedAt).toBeUndefined();
|
|
66
|
-
expect(groupPrivilege.UpdatedAt).toBeUndefined();
|
|
67
|
-
expect(groupPrivilege.CreatedById).toBeUndefined();
|
|
68
|
-
expect(groupPrivilege.UpdatedById).toBeUndefined();
|
|
69
|
-
}));
|
|
70
|
-
});
|
|
71
|
-
//# sourceMappingURL=group-privilege.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"group-privilege.test.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/group-privilege/group-privilege.test.ts"],"names":[],"mappings":"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"}
|
|
File without changes
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"login-user.spec.js","sourceRoot":"","sources":["../../../../../__tests__/unit/components/login-user/login-user.spec.ts"],"names":[],"mappings":"AAuuBA,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACvB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|