permissions-contractx 1.0.2 → 1.1.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/LICENSE +1 -1
- package/README.md +53 -1346
- package/dist/constants/contractx-permissions.constants.d.ts +84 -92
- package/dist/constants/contractx-permissions.constants.d.ts.map +1 -1
- package/dist/constants/contractx-permissions.constants.js +2 -2
- package/dist/constants/contractx-roles.constants.d.ts +150 -254
- package/dist/constants/contractx-roles.constants.d.ts.map +1 -1
- package/dist/constants/contractx-roles.constants.js +2 -2
- package/dist/constants/index.d.ts +1 -0
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +1 -0
- package/dist/constants/permission-names.constants.d.ts +310 -0
- package/dist/constants/permission-names.constants.d.ts.map +1 -0
- package/dist/constants/permission-names.constants.js +209 -0
- package/dist/constants/security.constants.d.ts +49 -49
- package/dist/constants/security.constants.d.ts.map +1 -1
- package/dist/constants/security.constants.js +2 -2
- package/dist/decorators/current-user.decorator.d.ts +5 -53
- package/dist/decorators/current-user.decorator.d.ts.map +1 -1
- package/dist/decorators/current-user.decorator.js +4 -51
- package/dist/decorators/index.d.ts +1 -0
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +1 -0
- package/dist/decorators/permission-writes.decorator.d.ts +14 -0
- package/dist/decorators/permission-writes.decorator.d.ts.map +1 -0
- package/dist/decorators/permission-writes.decorator.js +18 -0
- package/dist/decorators/permissions.decorator.d.ts +0 -58
- package/dist/decorators/permissions.decorator.d.ts.map +1 -1
- package/dist/decorators/permissions.decorator.js +0 -58
- package/dist/decorators/public.decorator.d.ts +0 -0
- package/dist/decorators/public.decorator.d.ts.map +0 -0
- package/dist/decorators/public.decorator.js +0 -0
- package/dist/decorators/roles.decorator.d.ts +4 -57
- package/dist/decorators/roles.decorator.d.ts.map +1 -1
- package/dist/decorators/roles.decorator.js +6 -57
- package/dist/guards/authorization.guard.d.ts +37 -0
- package/dist/guards/authorization.guard.d.ts.map +1 -0
- package/dist/guards/authorization.guard.js +150 -0
- package/dist/guards/index.d.ts +1 -0
- package/dist/guards/index.d.ts.map +1 -1
- package/dist/guards/index.js +1 -0
- package/dist/guards/jwt-auth.guard.d.ts +0 -0
- package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
- package/dist/guards/jwt-auth.guard.js +0 -0
- package/dist/guards/permissions.guard.d.ts +0 -0
- package/dist/guards/permissions.guard.d.ts.map +1 -1
- package/dist/guards/permissions.guard.js +8 -2
- package/dist/guards/roles.guard.d.ts +0 -0
- package/dist/guards/roles.guard.d.ts.map +1 -1
- package/dist/guards/roles.guard.js +1 -1
- package/dist/index.d.ts +0 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -6
- package/dist/interfaces/index.d.ts +1 -0
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/jwt-payload.interface.d.ts +46 -9
- package/dist/interfaces/jwt-payload.interface.d.ts.map +1 -1
- package/dist/interfaces/jwt-payload.interface.js +19 -0
- package/dist/interfaces/permission-mode.enum.d.ts +22 -0
- package/dist/interfaces/permission-mode.enum.d.ts.map +1 -0
- package/dist/interfaces/permission-mode.enum.js +25 -0
- package/dist/modules/index.d.ts +0 -0
- package/dist/modules/index.d.ts.map +0 -0
- package/dist/modules/index.js +0 -0
- package/dist/modules/permissions-contractx.module.d.ts +0 -0
- package/dist/modules/permissions-contractx.module.d.ts.map +1 -1
- package/dist/modules/permissions-contractx.module.js +4 -2
- package/dist/services/contractx-authorization.service.d.ts +198 -27
- package/dist/services/contractx-authorization.service.d.ts.map +1 -1
- package/dist/services/contractx-authorization.service.js +2 -0
- package/dist/services/contractx-validation.service.d.ts +93 -12
- package/dist/services/contractx-validation.service.d.ts.map +1 -1
- package/dist/services/contractx-validation.service.js +1 -0
- package/dist/services/index.d.ts +0 -2
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +2 -0
- package/dist/services/user-context.service.d.ts +29 -34
- package/dist/services/user-context.service.d.ts.map +1 -1
- package/dist/services/user-context.service.js +65 -44
- package/package.json +5 -24
- package/dist/services/contractx-document-compliance.service.d.ts +0 -85
- package/dist/services/contractx-document-compliance.service.d.ts.map +0 -1
- package/dist/services/contractx-document-compliance.service.js +0 -536
- package/dist/test-document-compliance.d.ts +0 -7
- package/dist/test-document-compliance.d.ts.map +0 -1
- package/dist/test-document-compliance.js +0 -118
|
@@ -3,75 +3,75 @@
|
|
|
3
3
|
* Implements complete role hierarchy for client/provider contract management
|
|
4
4
|
*/
|
|
5
5
|
export declare const CONTRACTX_ROLES: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
6
|
+
SUPERADMIN: string;
|
|
7
|
+
CLIENT_CONTRACT_ADMIN: string;
|
|
8
|
+
CLIENT_PERFORMANCE_RESP: string;
|
|
9
|
+
CLIENT_FINANCE_RESP: string;
|
|
10
|
+
CLIENT_REPORTS_RESP: string;
|
|
11
|
+
CLIENT_RELATIONSHIP_RESP: string;
|
|
12
|
+
CLIENT_RISK_RESP: string;
|
|
13
|
+
PROVIDER_CONTRACT_ADMIN: string;
|
|
14
|
+
PROVIDER_PERFORMANCE_RESP: string;
|
|
15
|
+
PROVIDER_FINANCE_RESP: string;
|
|
16
|
+
PROVIDER_REPORTS_RESP: string;
|
|
17
|
+
PROVIDER_RELATIONSHIP_RESP: string;
|
|
18
|
+
PROVIDER_RISK_RESP: string;
|
|
19
|
+
SUPPORT: string;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* ODS Role Hierarchy Levels - Exact hierarchy from Excel specification
|
|
23
23
|
* Higher numbers indicate higher privileges
|
|
24
24
|
*/
|
|
25
25
|
export declare const ROLE_HIERARCHY: {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
26
|
+
[CONTRACTX_ROLES.SUPERADMIN]: number;
|
|
27
|
+
[CONTRACTX_ROLES.SUPPORT]: number;
|
|
28
|
+
[CONTRACTX_ROLES.CLIENT_CONTRACT_ADMIN]: number;
|
|
29
|
+
[CONTRACTX_ROLES.CLIENT_PERFORMANCE_RESP]: number;
|
|
30
|
+
[CONTRACTX_ROLES.CLIENT_FINANCE_RESP]: number;
|
|
31
|
+
[CONTRACTX_ROLES.CLIENT_REPORTS_RESP]: number;
|
|
32
|
+
[CONTRACTX_ROLES.CLIENT_RELATIONSHIP_RESP]: number;
|
|
33
|
+
[CONTRACTX_ROLES.CLIENT_RISK_RESP]: number;
|
|
34
|
+
[CONTRACTX_ROLES.PROVIDER_CONTRACT_ADMIN]: number;
|
|
35
|
+
[CONTRACTX_ROLES.PROVIDER_PERFORMANCE_RESP]: number;
|
|
36
|
+
[CONTRACTX_ROLES.PROVIDER_FINANCE_RESP]: number;
|
|
37
|
+
[CONTRACTX_ROLES.PROVIDER_REPORTS_RESP]: number;
|
|
38
|
+
[CONTRACTX_ROLES.PROVIDER_RELATIONSHIP_RESP]: number;
|
|
39
|
+
[CONTRACTX_ROLES.PROVIDER_RISK_RESP]: number;
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Permission Categories for organization
|
|
43
43
|
*/
|
|
44
44
|
export declare const PERMISSION_CATEGORIES: {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
45
|
+
USER_MANAGEMENT: string;
|
|
46
|
+
ROLE_MANAGEMENT: string;
|
|
47
|
+
PERMISSION_MANAGEMENT: string;
|
|
48
|
+
CLIENT_MANAGEMENT: string;
|
|
49
|
+
PROVIDER_MANAGEMENT: string;
|
|
50
|
+
CONTRACT_MANAGEMENT: string;
|
|
51
|
+
DOCUMENT_MANAGEMENT: string;
|
|
52
|
+
DELIVERABLE_MANAGEMENT: string;
|
|
53
|
+
PERFORMANCE_MANAGEMENT: string;
|
|
54
|
+
FINANCIAL_MANAGEMENT: string;
|
|
55
|
+
COMMUNICATION_MANAGEMENT: string;
|
|
56
|
+
SYSTEM_ADMINISTRATION: string;
|
|
57
57
|
};
|
|
58
58
|
/**
|
|
59
59
|
* ODS Role Groups for easy assignment and management
|
|
60
60
|
*/
|
|
61
61
|
export declare const ROLE_GROUPS: {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
62
|
+
ADMIN_ROLES: string[];
|
|
63
|
+
CLIENT_ROLES: string[];
|
|
64
|
+
PROVIDER_ROLES: string[];
|
|
65
|
+
MANAGER_ROLES: string[];
|
|
66
|
+
VIEWER_ROLES: string[];
|
|
67
|
+
RESPONSIBILITY_ROLES: string[];
|
|
68
|
+
SYSTEM_ROLES: string[];
|
|
69
69
|
};
|
|
70
70
|
/**
|
|
71
71
|
* Module constants for metadata
|
|
72
72
|
*/
|
|
73
73
|
export declare const MODULE_CONSTANTS: {
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
MODULE_OPTIONS_TOKEN: string;
|
|
75
|
+
JWT_CONFIG_TOKEN: string;
|
|
76
76
|
};
|
|
77
77
|
//# sourceMappingURL=security.constants.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.constants.d.ts","sourceRoot":"","sources":["../../src/constants/security.constants.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"security.constants.d.ts","sourceRoot":"","sources":["../../src/constants/security.constants.ts"],"names":[],"mappings":"AAYA;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;CAmB3B,CAAC;AACF;;;GAGG;AACH,eAAO,MAAM,cAAc;IACvB,CAAC,eAAe,CAAC,UAAU,CAAC,SAAK;IACjC,CAAC,eAAe,CAAC,OAAO,CAAC,SAAI;IAE7B,CAAC,eAAe,CAAC,qBAAqB,CAAC,SAAI;IAC3C,CAAC,eAAe,CAAC,uBAAuB,CAAC,SAAI;IAC7C,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAI;IACzC,CAAC,eAAe,CAAC,mBAAmB,CAAC,SAAI;IACzC,CAAC,eAAe,CAAC,wBAAwB,CAAC,SAAI;IAC9C,CAAC,eAAe,CAAC,gBAAgB,CAAC,SAAI;IAEtC,CAAC,eAAe,CAAC,uBAAuB,CAAC,SAAI;IAC7C,CAAC,eAAe,CAAC,yBAAyB,CAAC,SAAI;IAC/C,CAAC,eAAe,CAAC,qBAAqB,CAAC,SAAI;IAC3C,CAAC,eAAe,CAAC,qBAAqB,CAAC,SAAI;IAC3C,CAAC,eAAe,CAAC,0BAA0B,CAAC,SAAI;IAChD,CAAC,eAAe,CAAC,kBAAkB,CAAC,SAAI;CAC3C,CAAC;AACF;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAajC,CAAC;AACF;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;CAkDvB,CAAC;AACF;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAG5B,CAAC"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MODULE_CONSTANTS = exports.ROLE_GROUPS = exports.PERMISSION_CATEGORIES = exports.ROLE_HIERARCHY = exports.CONTRACTX_ROLES = void 0;
|
|
2
4
|
// ===================================================================
|
|
3
5
|
// ContractX ODS (Operational Data Store) Security Constants
|
|
4
6
|
// ===================================================================
|
|
@@ -11,8 +13,6 @@
|
|
|
11
13
|
//
|
|
12
14
|
// Version: 2.0.0 - ODS Complete Implementation
|
|
13
15
|
// ===================================================================
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.MODULE_CONSTANTS = exports.ROLE_GROUPS = exports.PERMISSION_CATEGORIES = exports.ROLE_HIERARCHY = exports.CONTRACTX_ROLES = void 0;
|
|
16
16
|
/**
|
|
17
17
|
* ODS Roles - Exact 16 roles from Excel specification
|
|
18
18
|
* Implements complete role hierarchy for client/provider contract management
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { JwtPayload } from '../interfaces';
|
|
2
1
|
/**
|
|
3
2
|
* Parameter decorator to inject the current authenticated user into a route handler
|
|
4
3
|
*
|
|
@@ -8,66 +7,19 @@ import { JwtPayload } from '../interfaces';
|
|
|
8
7
|
*
|
|
9
8
|
* @example
|
|
10
9
|
* ```typescript
|
|
11
|
-
* // Get full user object
|
|
12
10
|
* @Get('profile')
|
|
13
11
|
* getProfile(@CurrentUser() user: JwtPayload) {
|
|
14
12
|
* return user;
|
|
15
13
|
* }
|
|
16
|
-
*
|
|
17
|
-
* // Get specific user property
|
|
18
|
-
* @Post('action')
|
|
19
|
-
* performAction(@CurrentUser('sub') userId: string) {
|
|
20
|
-
* // Only gets the user ID
|
|
21
|
-
* }
|
|
22
|
-
* ```
|
|
23
|
-
*/
|
|
24
|
-
export declare const CurrentUser: (...dataOrPipes: (keyof JwtPayload | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>> | undefined)[]) => ParameterDecorator;
|
|
25
|
-
/**
|
|
26
|
-
* Decorator to get current user's ID
|
|
27
|
-
*
|
|
28
|
-
* @example
|
|
29
|
-
* ```typescript
|
|
30
|
-
* @Post('create')
|
|
31
|
-
* createResource(@UserId() userId: string) {
|
|
32
|
-
* // Gets user.sub as userId
|
|
33
|
-
* }
|
|
34
14
|
* ```
|
|
35
15
|
*/
|
|
16
|
+
export declare const CurrentUser: (...dataOrPipes: (string | import("@nestjs/common").PipeTransform<any, any> | import("@nestjs/common").Type<import("@nestjs/common").PipeTransform<any, any>>)[]) => ParameterDecorator;
|
|
17
|
+
/** Decorator to get current user's ID */
|
|
36
18
|
export declare const UserId: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
37
|
-
/**
|
|
38
|
-
* Decorator to get current user's roles
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* ```typescript
|
|
42
|
-
* @Get('roles')
|
|
43
|
-
* getUserRoles(@UserRoles() roles: string[]) {
|
|
44
|
-
* return { roles };
|
|
45
|
-
* }
|
|
46
|
-
* ```
|
|
47
|
-
*/
|
|
19
|
+
/** Decorator to get current user's roles */
|
|
48
20
|
export declare const UserRoles: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
49
|
-
/**
|
|
50
|
-
* Decorator to get current user's permissions
|
|
51
|
-
*
|
|
52
|
-
* @example
|
|
53
|
-
* ```typescript
|
|
54
|
-
* @Get('permissions')
|
|
55
|
-
* getUserPermissions(@UserPermissions() permissions: string[]) {
|
|
56
|
-
* return { permissions };
|
|
57
|
-
* }
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
21
|
+
/** Decorator to get current user's permissions */
|
|
60
22
|
export declare const UserPermissions: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
61
|
-
/**
|
|
62
|
-
* Decorator to get current user's client ID
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* @Get('client-data')
|
|
67
|
-
* getClientData(@UserClientId() clientId: string) {
|
|
68
|
-
* // Gets user.clientId
|
|
69
|
-
* }
|
|
70
|
-
* ```
|
|
71
|
-
*/
|
|
23
|
+
/** Decorator to get current user's client ID */
|
|
72
24
|
export declare const UserClientId: (...dataOrPipes: unknown[]) => ParameterDecorator;
|
|
73
25
|
//# sourceMappingURL=current-user.decorator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"current-user.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/current-user.decorator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"current-user.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/current-user.decorator.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,yLAItB,CAAC;AAEH,yCAAyC;AACzC,eAAO,MAAM,MAAM,mDAGjB,CAAC;AAEH,4CAA4C;AAC5C,eAAO,MAAM,SAAS,mDAGpB,CAAC;AAEH,kDAAkD;AAClD,eAAO,MAAM,eAAe,mDAG1B,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,YAAY,mDAGvB,CAAC"}
|
|
@@ -11,17 +11,10 @@ const common_1 = require("@nestjs/common");
|
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* ```typescript
|
|
14
|
-
* // Get full user object
|
|
15
14
|
* @Get('profile')
|
|
16
15
|
* getProfile(@CurrentUser() user: JwtPayload) {
|
|
17
16
|
* return user;
|
|
18
17
|
* }
|
|
19
|
-
*
|
|
20
|
-
* // Get specific user property
|
|
21
|
-
* @Post('action')
|
|
22
|
-
* performAction(@CurrentUser('sub') userId: string) {
|
|
23
|
-
* // Only gets the user ID
|
|
24
|
-
* }
|
|
25
18
|
* ```
|
|
26
19
|
*/
|
|
27
20
|
exports.CurrentUser = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
@@ -29,62 +22,22 @@ exports.CurrentUser = (0, common_1.createParamDecorator)((data, ctx) => {
|
|
|
29
22
|
const user = request.user;
|
|
30
23
|
return data ? user?.[data] : user;
|
|
31
24
|
});
|
|
32
|
-
/**
|
|
33
|
-
* Decorator to get current user's ID
|
|
34
|
-
*
|
|
35
|
-
* @example
|
|
36
|
-
* ```typescript
|
|
37
|
-
* @Post('create')
|
|
38
|
-
* createResource(@UserId() userId: string) {
|
|
39
|
-
* // Gets user.sub as userId
|
|
40
|
-
* }
|
|
41
|
-
* ```
|
|
42
|
-
*/
|
|
25
|
+
/** Decorator to get current user's ID */
|
|
43
26
|
exports.UserId = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
44
27
|
const request = ctx.switchToHttp().getRequest();
|
|
45
28
|
return request.user?.sub;
|
|
46
29
|
});
|
|
47
|
-
/**
|
|
48
|
-
* Decorator to get current user's roles
|
|
49
|
-
*
|
|
50
|
-
* @example
|
|
51
|
-
* ```typescript
|
|
52
|
-
* @Get('roles')
|
|
53
|
-
* getUserRoles(@UserRoles() roles: string[]) {
|
|
54
|
-
* return { roles };
|
|
55
|
-
* }
|
|
56
|
-
* ```
|
|
57
|
-
*/
|
|
30
|
+
/** Decorator to get current user's roles */
|
|
58
31
|
exports.UserRoles = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
59
32
|
const request = ctx.switchToHttp().getRequest();
|
|
60
33
|
return request.user?.role || [];
|
|
61
34
|
});
|
|
62
|
-
/**
|
|
63
|
-
* Decorator to get current user's permissions
|
|
64
|
-
*
|
|
65
|
-
* @example
|
|
66
|
-
* ```typescript
|
|
67
|
-
* @Get('permissions')
|
|
68
|
-
* getUserPermissions(@UserPermissions() permissions: string[]) {
|
|
69
|
-
* return { permissions };
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
35
|
+
/** Decorator to get current user's permissions */
|
|
73
36
|
exports.UserPermissions = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
74
37
|
const request = ctx.switchToHttp().getRequest();
|
|
75
38
|
return request.user?.permissions || [];
|
|
76
39
|
});
|
|
77
|
-
/**
|
|
78
|
-
* Decorator to get current user's client ID
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```typescript
|
|
82
|
-
* @Get('client-data')
|
|
83
|
-
* getClientData(@UserClientId() clientId: string) {
|
|
84
|
-
* // Gets user.clientId
|
|
85
|
-
* }
|
|
86
|
-
* ```
|
|
87
|
-
*/
|
|
40
|
+
/** Decorator to get current user's client ID */
|
|
88
41
|
exports.UserClientId = (0, common_1.createParamDecorator)((_data, ctx) => {
|
|
89
42
|
const request = ctx.switchToHttp().getRequest();
|
|
90
43
|
return request.user?.clientId;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/decorators/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,+BAA+B,CAAC"}
|
package/dist/decorators/index.js
CHANGED
|
@@ -18,3 +18,4 @@ __exportStar(require("./public.decorator"), exports);
|
|
|
18
18
|
__exportStar(require("./roles.decorator"), exports);
|
|
19
19
|
__exportStar(require("./permissions.decorator"), exports);
|
|
20
20
|
__exportStar(require("./current-user.decorator"), exports);
|
|
21
|
+
__exportStar(require("./permission-writes.decorator"), exports);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* [ADR-004 Fase 2 / Bloque 1] Override del eje lectura/escritura (D3) que usa el
|
|
3
|
+
* AuthorizationGuard para clasificar la petición, cuando el método HTTP no basta:
|
|
4
|
+
* - @PermissionWrites(true) → tratar como ESCRITURA (p.ej. un GET que muta).
|
|
5
|
+
* - @PermissionWrites(false) → tratar como LECTURA (p.ej. búsqueda por POST).
|
|
6
|
+
* Sin el decorador, la clasificación cae por método HTTP (GET/HEAD/OPTIONS = lectura).
|
|
7
|
+
*
|
|
8
|
+
* Nota: `RequirePermissions` NO se define aquí — ya existe en
|
|
9
|
+
* permissions.decorator.ts (mismo metadata key 'permissions' que lee el guard).
|
|
10
|
+
* Este archivo solo añade lo que faltaba en el paquete.
|
|
11
|
+
*/
|
|
12
|
+
export declare const PERMISSION_WRITES_KEY = "permission_writes";
|
|
13
|
+
export declare const PermissionWrites: (writes: boolean) => import("@nestjs/common").CustomDecorator<string>;
|
|
14
|
+
//# sourceMappingURL=permission-writes.decorator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-writes.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/permission-writes.decorator.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,qBAAqB,sBAAsB,CAAC;AAEzD,eAAO,MAAM,gBAAgB,GAAI,QAAQ,OAAO,qDAA+C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionWrites = exports.PERMISSION_WRITES_KEY = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
/**
|
|
6
|
+
* [ADR-004 Fase 2 / Bloque 1] Override del eje lectura/escritura (D3) que usa el
|
|
7
|
+
* AuthorizationGuard para clasificar la petición, cuando el método HTTP no basta:
|
|
8
|
+
* - @PermissionWrites(true) → tratar como ESCRITURA (p.ej. un GET que muta).
|
|
9
|
+
* - @PermissionWrites(false) → tratar como LECTURA (p.ej. búsqueda por POST).
|
|
10
|
+
* Sin el decorador, la clasificación cae por método HTTP (GET/HEAD/OPTIONS = lectura).
|
|
11
|
+
*
|
|
12
|
+
* Nota: `RequirePermissions` NO se define aquí — ya existe en
|
|
13
|
+
* permissions.decorator.ts (mismo metadata key 'permissions' que lee el guard).
|
|
14
|
+
* Este archivo solo añade lo que faltaba en el paquete.
|
|
15
|
+
*/
|
|
16
|
+
exports.PERMISSION_WRITES_KEY = 'permission_writes';
|
|
17
|
+
const PermissionWrites = (writes) => (0, common_1.SetMetadata)(exports.PERMISSION_WRITES_KEY, writes);
|
|
18
|
+
exports.PermissionWrites = PermissionWrites;
|
|
@@ -8,90 +8,32 @@ export declare const PERMISSIONS_KEY = "permissions";
|
|
|
8
8
|
* User must have all specified permissions (AND logic).
|
|
9
9
|
*
|
|
10
10
|
* @param permissions - Array of permission codes required to access the route
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* @RequirePermissions('users.create', 'users.update')
|
|
15
|
-
* @Post('users')
|
|
16
|
-
* createUser() {
|
|
17
|
-
* // User must have both users.create AND users.update permissions
|
|
18
|
-
* }
|
|
19
|
-
* ```
|
|
20
11
|
*/
|
|
21
12
|
export declare const RequirePermissions: (...permissions: string[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
22
13
|
/**
|
|
23
14
|
* Decorator requiring any of the specified permissions (OR logic)
|
|
24
15
|
*
|
|
25
16
|
* @param permissions - Array of permission codes, user needs at least one
|
|
26
|
-
*
|
|
27
|
-
* @example
|
|
28
|
-
* ```typescript
|
|
29
|
-
* @RequireAnyPermission('users.read', 'users.show')
|
|
30
|
-
* @Get('users/:id')
|
|
31
|
-
* getUser() {
|
|
32
|
-
* // User needs either users.read OR users.show permission
|
|
33
|
-
* }
|
|
34
|
-
* ```
|
|
35
17
|
*/
|
|
36
18
|
export declare const RequireAnyPermission: (...permissions: string[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
37
19
|
/**
|
|
38
20
|
* Decorator for read access (show, read, filter)
|
|
39
|
-
*
|
|
40
21
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
41
|
-
*
|
|
42
|
-
* @example
|
|
43
|
-
* ```typescript
|
|
44
|
-
* @ReadAccess('users')
|
|
45
|
-
* @Get('users')
|
|
46
|
-
* getUsers() {
|
|
47
|
-
* // User needs users.read, users.show, or users.filter permission
|
|
48
|
-
* }
|
|
49
|
-
* ```
|
|
50
22
|
*/
|
|
51
23
|
export declare const ReadAccess: (module: string) => import("@nestjs/common").CustomDecorator<string>;
|
|
52
24
|
/**
|
|
53
25
|
* Decorator for write access (create, update)
|
|
54
|
-
*
|
|
55
26
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
56
|
-
*
|
|
57
|
-
* @example
|
|
58
|
-
* ```typescript
|
|
59
|
-
* @WriteAccess('users')
|
|
60
|
-
* @Put('users/:id')
|
|
61
|
-
* updateUser() {
|
|
62
|
-
* // User needs users.create or users.update permission
|
|
63
|
-
* }
|
|
64
|
-
* ```
|
|
65
27
|
*/
|
|
66
28
|
export declare const WriteAccess: (module: string) => import("@nestjs/common").CustomDecorator<string>;
|
|
67
29
|
/**
|
|
68
30
|
* Decorator for delete access
|
|
69
|
-
*
|
|
70
31
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* ```typescript
|
|
74
|
-
* @DeleteAccess('users')
|
|
75
|
-
* @Delete('users/:id')
|
|
76
|
-
* deleteUser() {
|
|
77
|
-
* // User needs users.delete permission
|
|
78
|
-
* }
|
|
79
|
-
* ```
|
|
80
32
|
*/
|
|
81
33
|
export declare const DeleteAccess: (module: string) => import("@nestjs/common").CustomDecorator<string>;
|
|
82
34
|
/**
|
|
83
35
|
* Decorator for full CRUD access to a module
|
|
84
|
-
*
|
|
85
36
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
86
|
-
*
|
|
87
|
-
* @example
|
|
88
|
-
* ```typescript
|
|
89
|
-
* @FullAccess('users')
|
|
90
|
-
* @Controller('users')
|
|
91
|
-
* export class UsersController {
|
|
92
|
-
* // All methods require full user module access
|
|
93
|
-
* }
|
|
94
|
-
* ```
|
|
95
37
|
*/
|
|
96
38
|
export declare const FullAccess: (module: string) => import("@nestjs/common").CustomDecorator<string>;
|
|
97
39
|
//# sourceMappingURL=permissions.decorator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permissions.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/permissions.decorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C
|
|
1
|
+
{"version":3,"file":"permissions.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/permissions.decorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,eAAe,gBAAgB,CAAC;AAE7C;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,MAAM,EAAE,qDAA8C,CAAC;AAE1G;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAAI,GAAG,aAAa,MAAM,EAAE,qDAA+C,CAAC;AAE7G;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,qDACqC,CAAC;AAE/E;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,qDAAiE,CAAC;AAE5G;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,qDAA2C,CAAC;AAEvF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,qDAQtC,CAAC"}
|
|
@@ -12,15 +12,6 @@ exports.PERMISSIONS_KEY = 'permissions';
|
|
|
12
12
|
* User must have all specified permissions (AND logic).
|
|
13
13
|
*
|
|
14
14
|
* @param permissions - Array of permission codes required to access the route
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* @RequirePermissions('users.create', 'users.update')
|
|
19
|
-
* @Post('users')
|
|
20
|
-
* createUser() {
|
|
21
|
-
* // User must have both users.create AND users.update permissions
|
|
22
|
-
* }
|
|
23
|
-
* ```
|
|
24
15
|
*/
|
|
25
16
|
const RequirePermissions = (...permissions) => (0, common_1.SetMetadata)(exports.PERMISSIONS_KEY, permissions);
|
|
26
17
|
exports.RequirePermissions = RequirePermissions;
|
|
@@ -28,79 +19,30 @@ exports.RequirePermissions = RequirePermissions;
|
|
|
28
19
|
* Decorator requiring any of the specified permissions (OR logic)
|
|
29
20
|
*
|
|
30
21
|
* @param permissions - Array of permission codes, user needs at least one
|
|
31
|
-
*
|
|
32
|
-
* @example
|
|
33
|
-
* ```typescript
|
|
34
|
-
* @RequireAnyPermission('users.read', 'users.show')
|
|
35
|
-
* @Get('users/:id')
|
|
36
|
-
* getUser() {
|
|
37
|
-
* // User needs either users.read OR users.show permission
|
|
38
|
-
* }
|
|
39
|
-
* ```
|
|
40
22
|
*/
|
|
41
23
|
const RequireAnyPermission = (...permissions) => (0, common_1.SetMetadata)('anyPermissions', permissions);
|
|
42
24
|
exports.RequireAnyPermission = RequireAnyPermission;
|
|
43
25
|
/**
|
|
44
26
|
* Decorator for read access (show, read, filter)
|
|
45
|
-
*
|
|
46
27
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
47
|
-
*
|
|
48
|
-
* @example
|
|
49
|
-
* ```typescript
|
|
50
|
-
* @ReadAccess('users')
|
|
51
|
-
* @Get('users')
|
|
52
|
-
* getUsers() {
|
|
53
|
-
* // User needs users.read, users.show, or users.filter permission
|
|
54
|
-
* }
|
|
55
|
-
* ```
|
|
56
28
|
*/
|
|
57
29
|
const ReadAccess = (module) => (0, exports.RequireAnyPermission)(`${module}.read`, `${module}.show`, `${module}.filter`);
|
|
58
30
|
exports.ReadAccess = ReadAccess;
|
|
59
31
|
/**
|
|
60
32
|
* Decorator for write access (create, update)
|
|
61
|
-
*
|
|
62
33
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* @WriteAccess('users')
|
|
67
|
-
* @Put('users/:id')
|
|
68
|
-
* updateUser() {
|
|
69
|
-
* // User needs users.create or users.update permission
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
34
|
*/
|
|
73
35
|
const WriteAccess = (module) => (0, exports.RequireAnyPermission)(`${module}.create`, `${module}.update`);
|
|
74
36
|
exports.WriteAccess = WriteAccess;
|
|
75
37
|
/**
|
|
76
38
|
* Decorator for delete access
|
|
77
|
-
*
|
|
78
39
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
79
|
-
*
|
|
80
|
-
* @example
|
|
81
|
-
* ```typescript
|
|
82
|
-
* @DeleteAccess('users')
|
|
83
|
-
* @Delete('users/:id')
|
|
84
|
-
* deleteUser() {
|
|
85
|
-
* // User needs users.delete permission
|
|
86
|
-
* }
|
|
87
|
-
* ```
|
|
88
40
|
*/
|
|
89
41
|
const DeleteAccess = (module) => (0, exports.RequirePermissions)(`${module}.delete`);
|
|
90
42
|
exports.DeleteAccess = DeleteAccess;
|
|
91
43
|
/**
|
|
92
44
|
* Decorator for full CRUD access to a module
|
|
93
|
-
*
|
|
94
45
|
* @param module - Module name (e.g., 'users', 'contracts')
|
|
95
|
-
*
|
|
96
|
-
* @example
|
|
97
|
-
* ```typescript
|
|
98
|
-
* @FullAccess('users')
|
|
99
|
-
* @Controller('users')
|
|
100
|
-
* export class UsersController {
|
|
101
|
-
* // All methods require full user module access
|
|
102
|
-
* }
|
|
103
|
-
* ```
|
|
104
46
|
*/
|
|
105
47
|
const FullAccess = (module) => (0, exports.RequireAnyPermission)(`${module}.create`, `${module}.read`, `${module}.update`, `${module}.delete`, `${module}.show`, `${module}.filter`);
|
|
106
48
|
exports.FullAccess = FullAccess;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -8,68 +8,15 @@ export declare const ROLES_KEY = "roles";
|
|
|
8
8
|
* User must have at least one of the specified roles (OR logic).
|
|
9
9
|
*
|
|
10
10
|
* @param roles - Array of role names required to access the route
|
|
11
|
-
*
|
|
12
|
-
* @example
|
|
13
|
-
* ```typescript
|
|
14
|
-
* @Roles('superadmin', 'client_contract_admin')
|
|
15
|
-
* @Get('admin-data')
|
|
16
|
-
* getAdminData() {
|
|
17
|
-
* // Only users with superadmin OR client_contract_admin role
|
|
18
|
-
* }
|
|
19
|
-
* ```
|
|
20
11
|
*/
|
|
21
12
|
export declare const Roles: (...roles: string[]) => import("@nestjs/common").CustomDecorator<string>;
|
|
22
|
-
/**
|
|
23
|
-
* Decorator for ContractX specific admin roles
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* @AdminOnly()
|
|
28
|
-
* @Delete(':id')
|
|
29
|
-
* deleteResource() {
|
|
30
|
-
* // Only admin roles can access
|
|
31
|
-
* }
|
|
32
|
-
* ```
|
|
33
|
-
*/
|
|
13
|
+
/** Decorator for ContractX specific admin roles */
|
|
34
14
|
export declare const AdminOnly: () => import("@nestjs/common").CustomDecorator<string>;
|
|
35
|
-
/**
|
|
36
|
-
* Decorator for client-side roles only
|
|
37
|
-
*
|
|
38
|
-
* @example
|
|
39
|
-
* ```typescript
|
|
40
|
-
* @ClientOnly()
|
|
41
|
-
* @Get('client-data')
|
|
42
|
-
* getClientData() {
|
|
43
|
-
* // Only client-side roles can access
|
|
44
|
-
* }
|
|
45
|
-
* ```
|
|
46
|
-
*/
|
|
15
|
+
/** Decorator for client-side roles only */
|
|
47
16
|
export declare const ClientOnly: () => import("@nestjs/common").CustomDecorator<string>;
|
|
48
|
-
/**
|
|
49
|
-
* Decorator for provider-side roles only
|
|
50
|
-
*
|
|
51
|
-
* @example
|
|
52
|
-
* ```typescript
|
|
53
|
-
* @ProviderOnly()
|
|
54
|
-
* @Get('provider-data')
|
|
55
|
-
* getProviderData() {
|
|
56
|
-
* // Only provider-side roles can access
|
|
57
|
-
* }
|
|
58
|
-
* ```
|
|
59
|
-
*/
|
|
17
|
+
/** Decorator for provider-side roles only */
|
|
60
18
|
export declare const ProviderOnly: () => import("@nestjs/common").CustomDecorator<string>;
|
|
61
|
-
/**
|
|
62
|
-
* Decorator for superadmin access only
|
|
63
|
-
*
|
|
64
|
-
* @example
|
|
65
|
-
* ```typescript
|
|
66
|
-
* @SuperAdminOnly()
|
|
67
|
-
* @Post('system/configure')
|
|
68
|
-
* configureSystem() {
|
|
69
|
-
* // Only superadmin can access
|
|
70
|
-
* }
|
|
71
|
-
* ```
|
|
72
|
-
*/
|
|
19
|
+
/** Decorator for superadmin access only */
|
|
73
20
|
export declare const SuperAdminOnly: () => import("@nestjs/common").CustomDecorator<string>;
|
|
74
21
|
/**
|
|
75
22
|
* Alias for Roles decorator for backward compatibility
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roles.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/roles.decorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC
|
|
1
|
+
{"version":3,"file":"roles.decorator.d.ts","sourceRoot":"","sources":["../../src/decorators/roles.decorator.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,SAAS,UAAU,CAAC;AAEjC;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,MAAM,EAAE,qDAAkC,CAAC;AAK3E,mDAAmD;AACnD,eAAO,MAAM,SAAS,wDAAgF,CAAC;AAEvG,2CAA2C;AAC3C,eAAO,MAAM,UAAU,wDAQpB,CAAC;AAEJ,6CAA6C;AAC7C,eAAO,MAAM,YAAY,wDAQtB,CAAC;AAEJ,2CAA2C;AAC3C,eAAO,MAAM,cAAc,wDAA4B,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,aArCO,MAAM,EAAE,qDAqCP,CAAC"}
|