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.
Files changed (87) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +53 -1346
  3. package/dist/constants/contractx-permissions.constants.d.ts +84 -92
  4. package/dist/constants/contractx-permissions.constants.d.ts.map +1 -1
  5. package/dist/constants/contractx-permissions.constants.js +2 -2
  6. package/dist/constants/contractx-roles.constants.d.ts +150 -254
  7. package/dist/constants/contractx-roles.constants.d.ts.map +1 -1
  8. package/dist/constants/contractx-roles.constants.js +2 -2
  9. package/dist/constants/index.d.ts +1 -0
  10. package/dist/constants/index.d.ts.map +1 -1
  11. package/dist/constants/index.js +1 -0
  12. package/dist/constants/permission-names.constants.d.ts +310 -0
  13. package/dist/constants/permission-names.constants.d.ts.map +1 -0
  14. package/dist/constants/permission-names.constants.js +209 -0
  15. package/dist/constants/security.constants.d.ts +49 -49
  16. package/dist/constants/security.constants.d.ts.map +1 -1
  17. package/dist/constants/security.constants.js +2 -2
  18. package/dist/decorators/current-user.decorator.d.ts +5 -53
  19. package/dist/decorators/current-user.decorator.d.ts.map +1 -1
  20. package/dist/decorators/current-user.decorator.js +4 -51
  21. package/dist/decorators/index.d.ts +1 -0
  22. package/dist/decorators/index.d.ts.map +1 -1
  23. package/dist/decorators/index.js +1 -0
  24. package/dist/decorators/permission-writes.decorator.d.ts +14 -0
  25. package/dist/decorators/permission-writes.decorator.d.ts.map +1 -0
  26. package/dist/decorators/permission-writes.decorator.js +18 -0
  27. package/dist/decorators/permissions.decorator.d.ts +0 -58
  28. package/dist/decorators/permissions.decorator.d.ts.map +1 -1
  29. package/dist/decorators/permissions.decorator.js +0 -58
  30. package/dist/decorators/public.decorator.d.ts +0 -0
  31. package/dist/decorators/public.decorator.d.ts.map +0 -0
  32. package/dist/decorators/public.decorator.js +0 -0
  33. package/dist/decorators/roles.decorator.d.ts +4 -57
  34. package/dist/decorators/roles.decorator.d.ts.map +1 -1
  35. package/dist/decorators/roles.decorator.js +6 -57
  36. package/dist/guards/authorization.guard.d.ts +37 -0
  37. package/dist/guards/authorization.guard.d.ts.map +1 -0
  38. package/dist/guards/authorization.guard.js +150 -0
  39. package/dist/guards/index.d.ts +1 -0
  40. package/dist/guards/index.d.ts.map +1 -1
  41. package/dist/guards/index.js +1 -0
  42. package/dist/guards/jwt-auth.guard.d.ts +0 -0
  43. package/dist/guards/jwt-auth.guard.d.ts.map +1 -1
  44. package/dist/guards/jwt-auth.guard.js +0 -0
  45. package/dist/guards/permissions.guard.d.ts +0 -0
  46. package/dist/guards/permissions.guard.d.ts.map +1 -1
  47. package/dist/guards/permissions.guard.js +8 -2
  48. package/dist/guards/roles.guard.d.ts +0 -0
  49. package/dist/guards/roles.guard.d.ts.map +1 -1
  50. package/dist/guards/roles.guard.js +1 -1
  51. package/dist/index.d.ts +0 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +0 -6
  54. package/dist/interfaces/index.d.ts +1 -0
  55. package/dist/interfaces/index.d.ts.map +1 -1
  56. package/dist/interfaces/index.js +1 -0
  57. package/dist/interfaces/jwt-payload.interface.d.ts +46 -9
  58. package/dist/interfaces/jwt-payload.interface.d.ts.map +1 -1
  59. package/dist/interfaces/jwt-payload.interface.js +19 -0
  60. package/dist/interfaces/permission-mode.enum.d.ts +22 -0
  61. package/dist/interfaces/permission-mode.enum.d.ts.map +1 -0
  62. package/dist/interfaces/permission-mode.enum.js +25 -0
  63. package/dist/modules/index.d.ts +0 -0
  64. package/dist/modules/index.d.ts.map +0 -0
  65. package/dist/modules/index.js +0 -0
  66. package/dist/modules/permissions-contractx.module.d.ts +0 -0
  67. package/dist/modules/permissions-contractx.module.d.ts.map +1 -1
  68. package/dist/modules/permissions-contractx.module.js +4 -2
  69. package/dist/services/contractx-authorization.service.d.ts +198 -27
  70. package/dist/services/contractx-authorization.service.d.ts.map +1 -1
  71. package/dist/services/contractx-authorization.service.js +2 -0
  72. package/dist/services/contractx-validation.service.d.ts +93 -12
  73. package/dist/services/contractx-validation.service.d.ts.map +1 -1
  74. package/dist/services/contractx-validation.service.js +1 -0
  75. package/dist/services/index.d.ts +0 -2
  76. package/dist/services/index.d.ts.map +1 -1
  77. package/dist/services/index.js +2 -0
  78. package/dist/services/user-context.service.d.ts +29 -34
  79. package/dist/services/user-context.service.d.ts.map +1 -1
  80. package/dist/services/user-context.service.js +65 -44
  81. package/package.json +5 -24
  82. package/dist/services/contractx-document-compliance.service.d.ts +0 -85
  83. package/dist/services/contractx-document-compliance.service.d.ts.map +0 -1
  84. package/dist/services/contractx-document-compliance.service.js +0 -536
  85. package/dist/test-document-compliance.d.ts +0 -7
  86. package/dist/test-document-compliance.d.ts.map +0 -1
  87. 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
- readonly SUPERADMIN: "superadmin";
7
- readonly CLIENT_CONTRACT_ADMIN: "client_contract_admin";
8
- readonly CLIENT_PERFORMANCE_RESP: "client_performance_resp";
9
- readonly CLIENT_FINANCE_RESP: "client_finance_resp";
10
- readonly CLIENT_REPORTS_RESP: "client_reports_resp";
11
- readonly CLIENT_RELATIONSHIP_RESP: "client_relationship_resp";
12
- readonly CLIENT_RISK_RESP: "client_risk_resp";
13
- readonly PROVIDER_CONTRACT_ADMIN: "provider_contract_admin";
14
- readonly PROVIDER_PERFORMANCE_RESP: "provider_performance_resp";
15
- readonly PROVIDER_FINANCE_RESP: "provider_finance_resp";
16
- readonly PROVIDER_REPORTS_RESP: "provider_reports_resp";
17
- readonly PROVIDER_RELATIONSHIP_RESP: "provider_relationship_resp";
18
- readonly PROVIDER_RISK_RESP: "provider_risk_resp";
19
- readonly SUPPORT: "support";
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
- readonly superadmin: 100;
27
- readonly support: 85;
28
- readonly client_contract_admin: 80;
29
- readonly client_performance_resp: 70;
30
- readonly client_finance_resp: 70;
31
- readonly client_reports_resp: 65;
32
- readonly client_relationship_resp: 65;
33
- readonly client_risk_resp: 65;
34
- readonly provider_contract_admin: 80;
35
- readonly provider_performance_resp: 70;
36
- readonly provider_finance_resp: 70;
37
- readonly provider_reports_resp: 65;
38
- readonly provider_relationship_resp: 65;
39
- readonly provider_risk_resp: 65;
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
- readonly USER_MANAGEMENT: "User Management";
46
- readonly ROLE_MANAGEMENT: "Role Management";
47
- readonly PERMISSION_MANAGEMENT: "Permission Management";
48
- readonly CLIENT_MANAGEMENT: "Client Management";
49
- readonly PROVIDER_MANAGEMENT: "Provider Management";
50
- readonly CONTRACT_MANAGEMENT: "Contract Management";
51
- readonly DOCUMENT_MANAGEMENT: "Document Management";
52
- readonly DELIVERABLE_MANAGEMENT: "Deliverable Management";
53
- readonly PERFORMANCE_MANAGEMENT: "Performance Management";
54
- readonly FINANCIAL_MANAGEMENT: "Financial Management";
55
- readonly COMMUNICATION_MANAGEMENT: "Communication Management";
56
- readonly SYSTEM_ADMINISTRATION: "System Administration";
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
- readonly ADMIN_ROLES: readonly ["superadmin", "client_contract_admin", "provider_contract_admin"];
63
- readonly CLIENT_ROLES: readonly ["client_contract_admin", "client_performance_resp", "client_finance_resp", "client_reports_resp", "client_relationship_resp", "client_risk_resp"];
64
- readonly PROVIDER_ROLES: readonly ["provider_contract_admin", "provider_performance_resp", "provider_finance_resp", "provider_reports_resp", "provider_relationship_resp", "provider_risk_resp"];
65
- readonly MANAGER_ROLES: readonly ["client_contract_admin", "provider_contract_admin", "client_performance_resp", "provider_performance_resp", "client_finance_resp", "provider_finance_resp"];
66
- readonly VIEWER_ROLES: readonly ["client_reports_resp", "provider_reports_resp"];
67
- readonly RESPONSIBILITY_ROLES: readonly ["client_performance_resp", "client_finance_resp", "client_reports_resp", "client_relationship_resp", "client_risk_resp", "provider_performance_resp", "provider_finance_resp", "provider_reports_resp", "provider_relationship_resp", "provider_risk_resp"];
68
- readonly SYSTEM_ROLES: readonly ["superadmin", "support"];
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
- readonly MODULE_OPTIONS_TOKEN: "PERMISSIONS_CONTRACTX_MODULE_OPTIONS";
75
- readonly JWT_CONFIG_TOKEN: "PERMISSIONS_CONTRACTX_JWT_CONFIG";
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":"AAaA;;;GAGG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;CAsBlB,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;CAmBjB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;CAaxB,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,WAAW;;;;;;;;CAwDd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC"}
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":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,WAAW,+MAOvB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,MAAM,mDAKlB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,SAAS,mDAKrB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,eAAe,mDAK3B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,mDAKxB,CAAC"}
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;
@@ -2,4 +2,5 @@ export * from './public.decorator';
2
2
  export * from './roles.decorator';
3
3
  export * from './permissions.decorator';
4
4
  export * from './current-user.decorator';
5
+ export * from './permission-writes.decorator';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -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;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,kBAAkB,GAAI,GAAG,aAAa,MAAM,EAAE,qDAChB,CAAC;AAE5C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,oBAAoB,GAAI,GAAG,aAAa,MAAM,EAAE,qDACjB,CAAC;AAE7C;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,qDAKtC,CAAC;AAEJ;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,qDAIvC,CAAC;AAEJ;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,qDACH,CAAC;AAEzC;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,qDAQtC,CAAC"}
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;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,MAAM,EAAE,qDAAkC,CAAC;AAE3E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,wDAIrB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,wDAOtB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,wDAOxB,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,cAAc,wDAA4B,CAAC;AAExD;;;GAGG;AACH,eAAO,MAAM,YAAY,aAhFO,MAAM,EAAE,qDAgFP,CAAC"}
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"}