@flusys/nestjs-iam 7.1.0 → 8.0.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.
- package/config/index.d.ts +3 -3
- package/config/message-keys.d.ts +2 -0
- package/controllers/action.controller.d.ts +4 -4
- package/controllers/company-action-permission.controller.d.ts +2 -2
- package/controllers/index.d.ts +6 -6
- package/controllers/my-permission.controller.d.ts +3 -3
- package/controllers/role-permission.controller.d.ts +5 -4
- package/controllers/role.controller.d.ts +2 -2
- package/controllers/user-action-permission.controller.d.ts +5 -4
- package/docs/iam-swagger.config.d.ts +2 -2
- package/docs/index.d.ts +1 -1
- package/dtos/action.dto.d.ts +2 -2
- package/dtos/index.d.ts +3 -3
- package/dtos/permission.dto.d.ts +16 -0
- package/entities/action.entity.d.ts +2 -2
- package/entities/index.d.ts +11 -11
- package/entities/permission-with-company.entity.d.ts +1 -1
- package/entities/role-with-company.entity.d.ts +1 -1
- package/entities/role.entity.d.ts +1 -1
- package/entities/user-iam-permission.entity.d.ts +1 -1
- package/enums/index.d.ts +4 -4
- package/fesm/284.js +1316 -0
- package/fesm/867.js +3801 -0
- package/fesm/chunks/364.js +86 -0
- package/fesm/config/index.js +135 -3
- package/fesm/controllers/index.js +18 -7
- package/fesm/docs/index.js +240 -1
- package/fesm/dtos/index.js +1168 -3
- package/fesm/entities/index.js +670 -31
- package/fesm/enums/index.js +97 -4
- package/fesm/helpers/index.js +125 -2
- package/fesm/index.js +818 -11
- package/fesm/interfaces/index.js +17 -3
- package/fesm/modules/index.js +259 -1
- package/fesm/runtime.js +134 -0
- package/fesm/services/index.js +43 -6
- package/fesm/types/index.js +15 -1
- package/helpers/company-access.helper.d.ts +2 -2
- package/helpers/index.d.ts +2 -2
- package/helpers/permission-mode.helper.d.ts +1 -1
- package/index.d.ts +11 -11
- package/interfaces/action.interface.d.ts +2 -2
- package/interfaces/iam-module-options.interface.d.ts +3 -3
- package/interfaces/index.d.ts +3 -3
- package/modules/iam.module.d.ts +2 -2
- package/modules/index.d.ts +1 -1
- package/package.json +30 -37
- package/services/action.service.d.ts +9 -9
- package/services/iam-config.service.d.ts +4 -4
- package/services/iam-datasource.service.d.ts +3 -3
- package/services/index.d.ts +6 -6
- package/services/permission-cache.service.d.ts +5 -5
- package/services/permission.service.d.ts +6 -4
- package/services/role.service.d.ts +8 -8
- package/types/index.d.ts +1 -1
- package/cjs/config/event-actions.js +0 -36
- package/cjs/config/iam.constants.js +0 -11
- package/cjs/config/index.js +0 -20
- package/cjs/config/message-keys.js +0 -71
- package/cjs/controllers/action.controller.js +0 -174
- package/cjs/controllers/action.controller.spec.js +0 -79
- package/cjs/controllers/company-action-permission.controller.js +0 -119
- package/cjs/controllers/company-action-permission.controller.spec.js +0 -65
- package/cjs/controllers/index.js +0 -23
- package/cjs/controllers/my-permission.controller.js +0 -147
- package/cjs/controllers/my-permission.controller.spec.js +0 -128
- package/cjs/controllers/role-permission.controller.js +0 -191
- package/cjs/controllers/role-permission.controller.spec.js +0 -140
- package/cjs/controllers/role.controller.js +0 -102
- package/cjs/controllers/role.controller.spec.js +0 -86
- package/cjs/controllers/user-action-permission.controller.js +0 -129
- package/cjs/controllers/user-action-permission.controller.spec.js +0 -68
- package/cjs/docs/iam-swagger.config.js +0 -209
- package/cjs/docs/iam-swagger.config.spec.js +0 -99
- package/cjs/docs/index.js +0 -18
- package/cjs/dtos/action.dto.js +0 -282
- package/cjs/dtos/index.js +0 -21
- package/cjs/dtos/permission.dto.js +0 -637
- package/cjs/dtos/role.dto.js +0 -155
- package/cjs/entities/action.entity.js +0 -138
- package/cjs/entities/index.js +0 -80
- package/cjs/entities/index.spec.js +0 -56
- package/cjs/entities/permission-base.entity.js +0 -107
- package/cjs/entities/permission-with-company.entity.js +0 -100
- package/cjs/entities/role-base.entity.js +0 -80
- package/cjs/entities/role-with-company.entity.js +0 -55
- package/cjs/entities/role.entity.js +0 -25
- package/cjs/entities/user-iam-permission.entity.js +0 -43
- package/cjs/enums/action-type.enum.js +0 -22
- package/cjs/enums/iam-entity-type.enum.js +0 -17
- package/cjs/enums/iam-permission-type.enum.js +0 -17
- package/cjs/enums/index.js +0 -21
- package/cjs/enums/permission-type.enum.js +0 -16
- package/cjs/helpers/company-access.helper.js +0 -23
- package/cjs/helpers/company-access.helper.spec.js +0 -68
- package/cjs/helpers/index.js +0 -19
- package/cjs/helpers/permission-mode.helper.js +0 -49
- package/cjs/helpers/permission-mode.helper.spec.js +0 -54
- package/cjs/index.js +0 -28
- package/cjs/interfaces/action.interface.js +0 -4
- package/cjs/interfaces/iam-module-options.interface.js +0 -4
- package/cjs/interfaces/index.js +0 -20
- package/cjs/interfaces/role.interface.js +0 -7
- package/cjs/modules/iam.module.js +0 -186
- package/cjs/modules/iam.module.spec.js +0 -282
- package/cjs/modules/index.js +0 -18
- package/cjs/services/action.service.js +0 -337
- package/cjs/services/action.service.spec.js +0 -351
- package/cjs/services/iam-config.service.js +0 -87
- package/cjs/services/iam-config.service.spec.js +0 -110
- package/cjs/services/iam-datasource.service.js +0 -129
- package/cjs/services/iam-datasource.service.spec.js +0 -110
- package/cjs/services/index.js +0 -23
- package/cjs/services/permission-cache.service.js +0 -544
- package/cjs/services/permission-cache.service.spec.js +0 -718
- package/cjs/services/permission.service.js +0 -914
- package/cjs/services/permission.service.spec.js +0 -918
- package/cjs/services/role.service.js +0 -224
- package/cjs/services/role.service.spec.js +0 -347
- package/cjs/types/index.js +0 -18
- package/cjs/types/logic-node.type.js +0 -30
- package/fesm/config/event-actions.js +0 -15
- package/fesm/config/iam.constants.js +0 -1
- package/fesm/config/message-keys.js +0 -35
- package/fesm/controllers/action.controller.js +0 -164
- package/fesm/controllers/action.controller.spec.js +0 -75
- package/fesm/controllers/company-action-permission.controller.js +0 -109
- package/fesm/controllers/company-action-permission.controller.spec.js +0 -61
- package/fesm/controllers/my-permission.controller.js +0 -137
- package/fesm/controllers/my-permission.controller.spec.js +0 -124
- package/fesm/controllers/role-permission.controller.js +0 -181
- package/fesm/controllers/role-permission.controller.spec.js +0 -136
- package/fesm/controllers/role.controller.js +0 -92
- package/fesm/controllers/role.controller.spec.js +0 -82
- package/fesm/controllers/user-action-permission.controller.js +0 -119
- package/fesm/controllers/user-action-permission.controller.spec.js +0 -64
- package/fesm/docs/iam-swagger.config.js +0 -199
- package/fesm/docs/iam-swagger.config.spec.js +0 -95
- package/fesm/dtos/action.dto.js +0 -252
- package/fesm/dtos/permission.dto.js +0 -571
- package/fesm/dtos/role.dto.js +0 -134
- package/fesm/entities/action.entity.js +0 -128
- package/fesm/entities/index.spec.js +0 -52
- package/fesm/entities/permission-base.entity.js +0 -100
- package/fesm/entities/permission-with-company.entity.js +0 -90
- package/fesm/entities/role-base.entity.js +0 -70
- package/fesm/entities/role-with-company.entity.js +0 -45
- package/fesm/entities/role.entity.js +0 -15
- package/fesm/entities/user-iam-permission.entity.js +0 -33
- package/fesm/enums/action-type.enum.js +0 -12
- package/fesm/enums/iam-entity-type.enum.js +0 -7
- package/fesm/enums/iam-permission-type.enum.js +0 -7
- package/fesm/enums/permission-type.enum.js +0 -6
- package/fesm/helpers/company-access.helper.js +0 -18
- package/fesm/helpers/company-access.helper.spec.js +0 -64
- package/fesm/helpers/permission-mode.helper.js +0 -49
- package/fesm/helpers/permission-mode.helper.spec.js +0 -50
- package/fesm/interfaces/action.interface.js +0 -3
- package/fesm/interfaces/iam-module-options.interface.js +0 -3
- package/fesm/interfaces/role.interface.js +0 -4
- package/fesm/modules/iam.module.js +0 -176
- package/fesm/modules/iam.module.spec.js +0 -278
- package/fesm/services/action.service.js +0 -327
- package/fesm/services/action.service.spec.js +0 -347
- package/fesm/services/iam-config.service.js +0 -77
- package/fesm/services/iam-config.service.spec.js +0 -106
- package/fesm/services/iam-datasource.service.js +0 -78
- package/fesm/services/iam-datasource.service.spec.js +0 -106
- package/fesm/services/permission-cache.service.js +0 -527
- package/fesm/services/permission-cache.service.spec.js +0 -714
- package/fesm/services/permission.service.js +0 -904
- package/fesm/services/permission.service.spec.js +0 -914
- package/fesm/services/role.service.js +0 -214
- package/fesm/services/role.service.spec.js +0 -343
- package/fesm/types/logic-node.type.js +0 -27
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "IAMConfigService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return IAMConfigService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _common = require("@nestjs/common");
|
|
12
|
-
const _iamconstants = require("../config/iam.constants");
|
|
13
|
-
const _permissiontypeenum = require("../enums/permission-type.enum");
|
|
14
|
-
const _helpers = require("../helpers");
|
|
15
|
-
const _iammoduleoptionsinterface = require("../interfaces/iam-module-options.interface");
|
|
16
|
-
function _define_property(obj, key, value) {
|
|
17
|
-
if (key in obj) {
|
|
18
|
-
Object.defineProperty(obj, key, {
|
|
19
|
-
value: value,
|
|
20
|
-
enumerable: true,
|
|
21
|
-
configurable: true,
|
|
22
|
-
writable: true
|
|
23
|
-
});
|
|
24
|
-
} else {
|
|
25
|
-
obj[key] = value;
|
|
26
|
-
}
|
|
27
|
-
return obj;
|
|
28
|
-
}
|
|
29
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
30
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
31
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
32
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
33
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
34
|
-
}
|
|
35
|
-
function _ts_metadata(k, v) {
|
|
36
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
37
|
-
}
|
|
38
|
-
function _ts_param(paramIndex, decorator) {
|
|
39
|
-
return function(target, key) {
|
|
40
|
-
decorator(target, key, paramIndex);
|
|
41
|
-
};
|
|
42
|
-
}
|
|
43
|
-
let IAMConfigService = class IAMConfigService {
|
|
44
|
-
// Database Mode
|
|
45
|
-
getDatabaseMode() {
|
|
46
|
-
return this.options.bootstrapAppConfig?.databaseMode ?? 'single';
|
|
47
|
-
}
|
|
48
|
-
isMultiTenant() {
|
|
49
|
-
return this.getDatabaseMode() === 'multi-tenant';
|
|
50
|
-
}
|
|
51
|
-
// Feature Flags
|
|
52
|
-
isCompanyFeatureEnabled() {
|
|
53
|
-
return this.options.bootstrapAppConfig?.enableCompanyFeature ?? false;
|
|
54
|
-
}
|
|
55
|
-
// Permission Mode
|
|
56
|
-
getPermissionMode() {
|
|
57
|
-
return _helpers.PermissionModeHelper.fromString(this.options.bootstrapAppConfig?.permissionMode);
|
|
58
|
-
}
|
|
59
|
-
isRbacEnabled() {
|
|
60
|
-
const mode = this.getPermissionMode();
|
|
61
|
-
return mode === _permissiontypeenum.IAMPermissionMode.RBAC || mode === _permissiontypeenum.IAMPermissionMode.FULL;
|
|
62
|
-
}
|
|
63
|
-
isDirectPermissionEnabled() {
|
|
64
|
-
const mode = this.getPermissionMode();
|
|
65
|
-
return mode === _permissiontypeenum.IAMPermissionMode.DIRECT || mode === _permissiontypeenum.IAMPermissionMode.FULL;
|
|
66
|
-
}
|
|
67
|
-
// Options
|
|
68
|
-
getOptions() {
|
|
69
|
-
return this.options;
|
|
70
|
-
}
|
|
71
|
-
constructor(injectedOptions){
|
|
72
|
-
_define_property(this, "options", void 0);
|
|
73
|
-
this.options = injectedOptions ?? {
|
|
74
|
-
global: false,
|
|
75
|
-
includeController: false
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
};
|
|
79
|
-
IAMConfigService = _ts_decorate([
|
|
80
|
-
(0, _common.Injectable)(),
|
|
81
|
-
_ts_param(0, (0, _common.Optional)()),
|
|
82
|
-
_ts_param(0, (0, _common.Inject)(_iamconstants.IAM_MODULE_OPTIONS)),
|
|
83
|
-
_ts_metadata("design:type", Function),
|
|
84
|
-
_ts_metadata("design:paramtypes", [
|
|
85
|
-
typeof _iammoduleoptionsinterface.IAMModuleOptions === "undefined" ? Object : _iammoduleoptionsinterface.IAMModuleOptions
|
|
86
|
-
])
|
|
87
|
-
], IAMConfigService);
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _permissiontypeenum = require("../enums/permission-type.enum");
|
|
6
|
-
const _iamconfigservice = require("./iam-config.service");
|
|
7
|
-
describe('IAMConfigService', ()=>{
|
|
8
|
-
describe('with no injected options (defaults)', ()=>{
|
|
9
|
-
let service;
|
|
10
|
-
beforeEach(()=>{
|
|
11
|
-
service = new _iamconfigservice.IAMConfigService();
|
|
12
|
-
});
|
|
13
|
-
it('defaults to single database mode', ()=>{
|
|
14
|
-
expect(service.getDatabaseMode()).toBe('single');
|
|
15
|
-
expect(service.isMultiTenant()).toBe(false);
|
|
16
|
-
});
|
|
17
|
-
it('defaults company feature to disabled', ()=>{
|
|
18
|
-
expect(service.isCompanyFeatureEnabled()).toBe(false);
|
|
19
|
-
});
|
|
20
|
-
it('defaults permission mode to FULL', ()=>{
|
|
21
|
-
expect(service.getPermissionMode()).toBe(_permissiontypeenum.IAMPermissionMode.FULL);
|
|
22
|
-
expect(service.isRbacEnabled()).toBe(true);
|
|
23
|
-
expect(service.isDirectPermissionEnabled()).toBe(true);
|
|
24
|
-
});
|
|
25
|
-
it('returns the fallback options object from getOptions', ()=>{
|
|
26
|
-
expect(service.getOptions()).toEqual({
|
|
27
|
-
global: false,
|
|
28
|
-
includeController: false
|
|
29
|
-
});
|
|
30
|
-
});
|
|
31
|
-
});
|
|
32
|
-
describe('with injected options', ()=>{
|
|
33
|
-
function buildService(overrides) {
|
|
34
|
-
const options = {
|
|
35
|
-
global: false,
|
|
36
|
-
includeController: false,
|
|
37
|
-
bootstrapAppConfig: {
|
|
38
|
-
databaseMode: 'single',
|
|
39
|
-
enableCompanyFeature: false,
|
|
40
|
-
...overrides
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
return new _iamconfigservice.IAMConfigService(options);
|
|
44
|
-
}
|
|
45
|
-
it('reports multi-tenant mode when configured', ()=>{
|
|
46
|
-
const service = buildService({
|
|
47
|
-
databaseMode: 'multi-tenant'
|
|
48
|
-
});
|
|
49
|
-
expect(service.getDatabaseMode()).toBe('multi-tenant');
|
|
50
|
-
expect(service.isMultiTenant()).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
it('reports company feature enabled when configured', ()=>{
|
|
53
|
-
const service = buildService({
|
|
54
|
-
enableCompanyFeature: true
|
|
55
|
-
});
|
|
56
|
-
expect(service.isCompanyFeatureEnabled()).toBe(true);
|
|
57
|
-
});
|
|
58
|
-
describe('permission mode: RBAC', ()=>{
|
|
59
|
-
let service;
|
|
60
|
-
beforeEach(()=>{
|
|
61
|
-
service = buildService({
|
|
62
|
-
permissionMode: 'RBAC'
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
it('enables RBAC but not direct permissions', ()=>{
|
|
66
|
-
expect(service.getPermissionMode()).toBe(_permissiontypeenum.IAMPermissionMode.RBAC);
|
|
67
|
-
expect(service.isRbacEnabled()).toBe(true);
|
|
68
|
-
expect(service.isDirectPermissionEnabled()).toBe(false);
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
describe('permission mode: DIRECT', ()=>{
|
|
72
|
-
let service;
|
|
73
|
-
beforeEach(()=>{
|
|
74
|
-
service = buildService({
|
|
75
|
-
permissionMode: 'DIRECT'
|
|
76
|
-
});
|
|
77
|
-
});
|
|
78
|
-
it('enables direct permissions but not RBAC', ()=>{
|
|
79
|
-
expect(service.getPermissionMode()).toBe(_permissiontypeenum.IAMPermissionMode.DIRECT);
|
|
80
|
-
expect(service.isRbacEnabled()).toBe(false);
|
|
81
|
-
expect(service.isDirectPermissionEnabled()).toBe(true);
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe('permission mode: FULL', ()=>{
|
|
85
|
-
let service;
|
|
86
|
-
beforeEach(()=>{
|
|
87
|
-
service = buildService({
|
|
88
|
-
permissionMode: 'FULL'
|
|
89
|
-
});
|
|
90
|
-
});
|
|
91
|
-
it('enables both RBAC and direct permissions', ()=>{
|
|
92
|
-
expect(service.getPermissionMode()).toBe(_permissiontypeenum.IAMPermissionMode.FULL);
|
|
93
|
-
expect(service.isRbacEnabled()).toBe(true);
|
|
94
|
-
expect(service.isDirectPermissionEnabled()).toBe(true);
|
|
95
|
-
});
|
|
96
|
-
});
|
|
97
|
-
it('returns the exact injected options object from getOptions', ()=>{
|
|
98
|
-
const options = {
|
|
99
|
-
global: true,
|
|
100
|
-
includeController: true,
|
|
101
|
-
bootstrapAppConfig: {
|
|
102
|
-
databaseMode: 'single',
|
|
103
|
-
enableCompanyFeature: true
|
|
104
|
-
}
|
|
105
|
-
};
|
|
106
|
-
const service = new _iamconfigservice.IAMConfigService(options);
|
|
107
|
-
expect(service.getOptions()).toBe(options);
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
Object.defineProperty(exports, "IAMDataSourceService", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return IAMDataSourceService;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
12
|
-
const _common = require("@nestjs/common");
|
|
13
|
-
const _core = require("@nestjs/core");
|
|
14
|
-
const _express = require("express");
|
|
15
|
-
const _helpers = require("../helpers");
|
|
16
|
-
const _iamconfigservice = require("./iam-config.service");
|
|
17
|
-
function _define_property(obj, key, value) {
|
|
18
|
-
if (key in obj) {
|
|
19
|
-
Object.defineProperty(obj, key, {
|
|
20
|
-
value: value,
|
|
21
|
-
enumerable: true,
|
|
22
|
-
configurable: true,
|
|
23
|
-
writable: true
|
|
24
|
-
});
|
|
25
|
-
} else {
|
|
26
|
-
obj[key] = value;
|
|
27
|
-
}
|
|
28
|
-
return obj;
|
|
29
|
-
}
|
|
30
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
31
|
-
if (typeof WeakMap !== "function") return null;
|
|
32
|
-
var cacheBabelInterop = new WeakMap();
|
|
33
|
-
var cacheNodeInterop = new WeakMap();
|
|
34
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
35
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
36
|
-
})(nodeInterop);
|
|
37
|
-
}
|
|
38
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
39
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
40
|
-
return obj;
|
|
41
|
-
}
|
|
42
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
43
|
-
return {
|
|
44
|
-
default: obj
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
48
|
-
if (cache && cache.has(obj)) {
|
|
49
|
-
return cache.get(obj);
|
|
50
|
-
}
|
|
51
|
-
var newObj = {
|
|
52
|
-
__proto__: null
|
|
53
|
-
};
|
|
54
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
55
|
-
for(var key in obj){
|
|
56
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
57
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
58
|
-
if (desc && (desc.get || desc.set)) {
|
|
59
|
-
Object.defineProperty(newObj, key, desc);
|
|
60
|
-
} else {
|
|
61
|
-
newObj[key] = obj[key];
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
newObj.default = obj;
|
|
66
|
-
if (cache) {
|
|
67
|
-
cache.set(obj, newObj);
|
|
68
|
-
}
|
|
69
|
-
return newObj;
|
|
70
|
-
}
|
|
71
|
-
function _ts_decorate(decorators, target, key, desc) {
|
|
72
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
73
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
74
|
-
else for(var i = decorators.length - 1; i >= 0; i--)if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
75
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
76
|
-
}
|
|
77
|
-
function _ts_metadata(k, v) {
|
|
78
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
79
|
-
}
|
|
80
|
-
function _ts_param(paramIndex, decorator) {
|
|
81
|
-
return function(target, key) {
|
|
82
|
-
decorator(target, key, paramIndex);
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
let IAMDataSourceService = class IAMDataSourceService extends _modules.MultiTenantDataSourceService {
|
|
86
|
-
static buildParentOptions(options) {
|
|
87
|
-
return {
|
|
88
|
-
bootstrapAppConfig: options.bootstrapAppConfig,
|
|
89
|
-
defaultDatabaseConfig: options.config?.defaultDatabaseConfig,
|
|
90
|
-
tenantDefaultDatabaseConfig: options.config?.tenantDefaultDatabaseConfig,
|
|
91
|
-
tenants: options.config?.tenants
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
getEnableCompanyFeatureForTenant(tenant) {
|
|
95
|
-
return tenant?.enableCompanyFeature ?? this.configService.isCompanyFeatureEnabled();
|
|
96
|
-
}
|
|
97
|
-
async getIAMEntities() {
|
|
98
|
-
const { getIAMEntitiesByConfig } = await Promise.resolve().then(()=>/*#__PURE__*/ _interop_require_wildcard(require("../entities")));
|
|
99
|
-
const enableCompanyFeature = this.getEnableCompanyFeatureForTenant(this.getCurrentTenant() ?? undefined);
|
|
100
|
-
const permissionMode = _helpers.PermissionModeHelper.toString(this.configService.getPermissionMode());
|
|
101
|
-
return getIAMEntitiesByConfig(enableCompanyFeature, permissionMode);
|
|
102
|
-
}
|
|
103
|
-
async createDataSourceFromConfig(config) {
|
|
104
|
-
const entities = await this.getIAMEntities();
|
|
105
|
-
return await super.createDataSourceFromConfig(config, entities);
|
|
106
|
-
}
|
|
107
|
-
constructor(configService, request){
|
|
108
|
-
super(IAMDataSourceService.buildParentOptions(configService.getOptions()), request), _define_property(this, "configService", void 0), this.configService = configService;
|
|
109
|
-
}
|
|
110
|
-
};
|
|
111
|
-
_define_property(IAMDataSourceService, "tenantConnections", new Map());
|
|
112
|
-
_define_property(IAMDataSourceService, "singleDataSource", null);
|
|
113
|
-
_define_property(IAMDataSourceService, "tenantsRegistry", new Map());
|
|
114
|
-
_define_property(IAMDataSourceService, "initialized", false);
|
|
115
|
-
_define_property(IAMDataSourceService, "connectionLocks", new Map());
|
|
116
|
-
_define_property(IAMDataSourceService, "singleConnectionLock", null);
|
|
117
|
-
IAMDataSourceService = _ts_decorate([
|
|
118
|
-
(0, _common.Injectable)({
|
|
119
|
-
scope: _common.Scope.REQUEST
|
|
120
|
-
}),
|
|
121
|
-
_ts_param(0, (0, _common.Inject)(_iamconfigservice.IAMConfigService)),
|
|
122
|
-
_ts_param(1, (0, _common.Optional)()),
|
|
123
|
-
_ts_param(1, (0, _common.Inject)(_core.REQUEST)),
|
|
124
|
-
_ts_metadata("design:type", Function),
|
|
125
|
-
_ts_metadata("design:paramtypes", [
|
|
126
|
-
typeof _iamconfigservice.IAMConfigService === "undefined" ? Object : _iamconfigservice.IAMConfigService,
|
|
127
|
-
typeof _express.Request === "undefined" ? Object : _express.Request
|
|
128
|
-
])
|
|
129
|
-
], IAMDataSourceService);
|
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
const _modules = require("@flusys/nestjs-shared/modules");
|
|
6
|
-
const _actionentity = require("../entities/action.entity");
|
|
7
|
-
const _useriampermissionentity = require("../entities/user-iam-permission.entity");
|
|
8
|
-
const _permissionwithcompanyentity = require("../entities/permission-with-company.entity");
|
|
9
|
-
const _roleentity = require("../entities/role.entity");
|
|
10
|
-
const _rolewithcompanyentity = require("../entities/role-with-company.entity");
|
|
11
|
-
const _iamdatasourceservice = require("./iam-datasource.service");
|
|
12
|
-
describe('IAMDataSourceService', ()=>{
|
|
13
|
-
let mockConfigService;
|
|
14
|
-
beforeEach(()=>{
|
|
15
|
-
mockConfigService = {
|
|
16
|
-
isCompanyFeatureEnabled: jest.fn().mockReturnValue(false),
|
|
17
|
-
getPermissionMode: jest.fn(),
|
|
18
|
-
getOptions: jest.fn().mockReturnValue({
|
|
19
|
-
global: false,
|
|
20
|
-
includeController: false
|
|
21
|
-
})
|
|
22
|
-
};
|
|
23
|
-
});
|
|
24
|
-
function buildService(request) {
|
|
25
|
-
return new _iamdatasourceservice.IAMDataSourceService(mockConfigService, request);
|
|
26
|
-
}
|
|
27
|
-
describe('getEnableCompanyFeatureForTenant', ()=>{
|
|
28
|
-
it('uses the tenant override when defined (true)', ()=>{
|
|
29
|
-
const service = buildService();
|
|
30
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(false);
|
|
31
|
-
expect(service.getEnableCompanyFeatureForTenant({
|
|
32
|
-
enableCompanyFeature: true
|
|
33
|
-
})).toBe(true);
|
|
34
|
-
});
|
|
35
|
-
it('uses the tenant override when defined (false)', ()=>{
|
|
36
|
-
const service = buildService();
|
|
37
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
38
|
-
expect(service.getEnableCompanyFeatureForTenant({
|
|
39
|
-
enableCompanyFeature: false
|
|
40
|
-
})).toBe(false);
|
|
41
|
-
});
|
|
42
|
-
it('falls back to the config service when the tenant has no override', ()=>{
|
|
43
|
-
const service = buildService();
|
|
44
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
45
|
-
expect(service.getEnableCompanyFeatureForTenant({})).toBe(true);
|
|
46
|
-
});
|
|
47
|
-
it('falls back to the config service when no tenant is provided', ()=>{
|
|
48
|
-
const service = buildService();
|
|
49
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
50
|
-
expect(service.getEnableCompanyFeatureForTenant(undefined)).toBe(true);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
describe('getIAMEntities', ()=>{
|
|
54
|
-
it('returns Action + non-company permission + role entities for RBAC mode', async ()=>{
|
|
55
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(false);
|
|
56
|
-
mockConfigService.getPermissionMode.mockReturnValue(1); // RBAC
|
|
57
|
-
const service = buildService();
|
|
58
|
-
const entities = await service.getIAMEntities();
|
|
59
|
-
expect(entities).toContain(_actionentity.Action);
|
|
60
|
-
expect(entities).toContain(_useriampermissionentity.UserIamPermission);
|
|
61
|
-
expect(entities).toContain(_roleentity.Role);
|
|
62
|
-
expect(entities).not.toContain(_permissionwithcompanyentity.UserIamPermissionWithCompany);
|
|
63
|
-
expect(entities).not.toContain(_rolewithcompanyentity.RoleWithCompany);
|
|
64
|
-
});
|
|
65
|
-
it('returns company-scoped entities when company feature is enabled', async ()=>{
|
|
66
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(true);
|
|
67
|
-
mockConfigService.getPermissionMode.mockReturnValue(3); // FULL
|
|
68
|
-
const service = buildService();
|
|
69
|
-
const entities = await service.getIAMEntities();
|
|
70
|
-
expect(entities).toContain(_actionentity.Action);
|
|
71
|
-
expect(entities).toContain(_permissionwithcompanyentity.UserIamPermissionWithCompany);
|
|
72
|
-
expect(entities).toContain(_rolewithcompanyentity.RoleWithCompany);
|
|
73
|
-
expect(entities).not.toContain(_useriampermissionentity.UserIamPermission);
|
|
74
|
-
expect(entities).not.toContain(_roleentity.Role);
|
|
75
|
-
});
|
|
76
|
-
it('excludes role entities entirely in DIRECT mode', async ()=>{
|
|
77
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(false);
|
|
78
|
-
mockConfigService.getPermissionMode.mockReturnValue(2); // DIRECT
|
|
79
|
-
const service = buildService();
|
|
80
|
-
const entities = await service.getIAMEntities();
|
|
81
|
-
expect(entities).toEqual([
|
|
82
|
-
_actionentity.Action,
|
|
83
|
-
_useriampermissionentity.UserIamPermission
|
|
84
|
-
]);
|
|
85
|
-
});
|
|
86
|
-
});
|
|
87
|
-
describe('createDataSourceFromConfig', ()=>{
|
|
88
|
-
it('resolves IAM entities and delegates to the parent with them', async ()=>{
|
|
89
|
-
mockConfigService.isCompanyFeatureEnabled.mockReturnValue(false);
|
|
90
|
-
mockConfigService.getPermissionMode.mockReturnValue(1); // RBAC
|
|
91
|
-
const service = buildService();
|
|
92
|
-
const fakeDataSource = {
|
|
93
|
-
isInitialized: true
|
|
94
|
-
};
|
|
95
|
-
const parentSpy = jest.spyOn(_modules.MultiTenantDataSourceService.prototype, 'createDataSourceFromConfig').mockResolvedValue(fakeDataSource);
|
|
96
|
-
const config = {
|
|
97
|
-
type: 'mysql',
|
|
98
|
-
host: 'localhost'
|
|
99
|
-
};
|
|
100
|
-
const result = await service.createDataSourceFromConfig(config);
|
|
101
|
-
expect(result).toBe(fakeDataSource);
|
|
102
|
-
expect(parentSpy).toHaveBeenCalledWith(config, [
|
|
103
|
-
_actionentity.Action,
|
|
104
|
-
_useriampermissionentity.UserIamPermission,
|
|
105
|
-
_roleentity.Role
|
|
106
|
-
]);
|
|
107
|
-
parentSpy.mockRestore();
|
|
108
|
-
});
|
|
109
|
-
});
|
|
110
|
-
});
|
package/cjs/services/index.js
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", {
|
|
3
|
-
value: true
|
|
4
|
-
});
|
|
5
|
-
_export_star(require("./action.service"), exports);
|
|
6
|
-
_export_star(require("./iam-config.service"), exports);
|
|
7
|
-
_export_star(require("./iam-datasource.service"), exports);
|
|
8
|
-
_export_star(require("./permission-cache.service"), exports);
|
|
9
|
-
_export_star(require("./permission.service"), exports);
|
|
10
|
-
_export_star(require("./role.service"), exports);
|
|
11
|
-
function _export_star(from, to) {
|
|
12
|
-
Object.keys(from).forEach(function(k) {
|
|
13
|
-
if (k !== "default" && !Object.prototype.hasOwnProperty.call(to, k)) {
|
|
14
|
-
Object.defineProperty(to, k, {
|
|
15
|
-
enumerable: true,
|
|
16
|
-
get: function() {
|
|
17
|
-
return from[k];
|
|
18
|
-
}
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
});
|
|
22
|
-
return from;
|
|
23
|
-
}
|