@ahksolution/permissions-sdk 1.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.
Files changed (56) hide show
  1. package/README.md +290 -0
  2. package/dist/client/index.d.ts +3 -0
  3. package/dist/client/index.d.ts.map +1 -0
  4. package/dist/client/index.js +19 -0
  5. package/dist/client/index.js.map +1 -0
  6. package/dist/client/permissions-client.module.d.ts +74 -0
  7. package/dist/client/permissions-client.module.d.ts.map +1 -0
  8. package/dist/client/permissions-client.module.js +109 -0
  9. package/dist/client/permissions-client.module.js.map +1 -0
  10. package/dist/client/permissions-grpc.client.d.ts +45 -0
  11. package/dist/client/permissions-grpc.client.d.ts.map +1 -0
  12. package/dist/client/permissions-grpc.client.js +182 -0
  13. package/dist/client/permissions-grpc.client.js.map +1 -0
  14. package/dist/constants.d.ts +44 -0
  15. package/dist/constants.d.ts.map +1 -0
  16. package/dist/constants.js +48 -0
  17. package/dist/constants.js.map +1 -0
  18. package/dist/decorators/index.d.ts +2 -0
  19. package/dist/decorators/index.d.ts.map +1 -0
  20. package/dist/decorators/index.js +18 -0
  21. package/dist/decorators/index.js.map +1 -0
  22. package/dist/decorators/require-permissions.decorator.d.ts +51 -0
  23. package/dist/decorators/require-permissions.decorator.d.ts.map +1 -0
  24. package/dist/decorators/require-permissions.decorator.js +69 -0
  25. package/dist/decorators/require-permissions.decorator.js.map +1 -0
  26. package/dist/guards/index.d.ts +2 -0
  27. package/dist/guards/index.d.ts.map +1 -0
  28. package/dist/guards/index.js +18 -0
  29. package/dist/guards/index.js.map +1 -0
  30. package/dist/guards/permissions.guard.d.ts +55 -0
  31. package/dist/guards/permissions.guard.d.ts.map +1 -0
  32. package/dist/guards/permissions.guard.js +139 -0
  33. package/dist/guards/permissions.guard.js.map +1 -0
  34. package/dist/index.d.ts +6 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +27 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/proto/permissions.proto +150 -0
  39. package/dist/types/evaluation.types.d.ts +80 -0
  40. package/dist/types/evaluation.types.d.ts.map +1 -0
  41. package/dist/types/evaluation.types.js +14 -0
  42. package/dist/types/evaluation.types.js.map +1 -0
  43. package/dist/types/grpc.types.d.ts +97 -0
  44. package/dist/types/grpc.types.d.ts.map +1 -0
  45. package/dist/types/grpc.types.js +15 -0
  46. package/dist/types/grpc.types.js.map +1 -0
  47. package/dist/types/index.d.ts +4 -0
  48. package/dist/types/index.d.ts.map +1 -0
  49. package/dist/types/index.js +20 -0
  50. package/dist/types/index.js.map +1 -0
  51. package/dist/types/permission.types.d.ts +51 -0
  52. package/dist/types/permission.types.d.ts.map +1 -0
  53. package/dist/types/permission.types.js +8 -0
  54. package/dist/types/permission.types.js.map +1 -0
  55. package/package.json +60 -0
  56. package/src/proto/permissions.proto +150 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.types.js","sourceRoot":"","sources":["../../src/types/permission.types.ts"],"names":[],"mappings":";;;AA4CA;;GAEG;AACU,QAAA,wBAAwB,GAAG,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@ahksolution/permissions-sdk",
3
+ "version": "1.0.0",
4
+ "description": "gRPC client SDK for AHK Solution Permissions Microservice - provides NestJS guard, decorators, and client for inter-service permission checks",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "src/proto"
10
+ ],
11
+ "scripts": {
12
+ "build": "tsc -p tsconfig.build.json && npm run copy:proto",
13
+ "copy:proto": "node -e \"const fs=require('fs');const path=require('path');fs.mkdirSync('dist/proto',{recursive:true});fs.copyFileSync('src/proto/permissions.proto','dist/proto/permissions.proto');\"",
14
+ "clean": "rimraf dist",
15
+ "prebuild": "npm run clean",
16
+ "prepublishOnly": "npm run build",
17
+ "lint": "eslint \"src/**/*.ts\"",
18
+ "lint:fix": "eslint \"src/**/*.ts\" --fix"
19
+ },
20
+ "keywords": [
21
+ "permissions",
22
+ "rbac",
23
+ "abac",
24
+ "grpc",
25
+ "nestjs",
26
+ "microservice",
27
+ "authorization"
28
+ ],
29
+ "author": "AHK",
30
+ "license": "MIT",
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "https://github.com/ahksolution/permissions-sdk"
37
+ },
38
+ "peerDependencies": {
39
+ "@nestjs/common": "^11.0.0",
40
+ "@nestjs/core": "^11.0.0",
41
+ "@nestjs/microservices": "^11.0.0",
42
+ "@grpc/grpc-js": "^1.12.0",
43
+ "@grpc/proto-loader": "^0.7.0",
44
+ "rxjs": "^7.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "@nestjs/common": "^11.0.1",
48
+ "@nestjs/core": "^11.0.1",
49
+ "@nestjs/microservices": "^11.0.1",
50
+ "@grpc/grpc-js": "^1.12.5",
51
+ "@grpc/proto-loader": "^0.7.13",
52
+ "@types/node": "^22.10.7",
53
+ "rimraf": "^6.1.2",
54
+ "rxjs": "^7.8.1",
55
+ "typescript": "^5.7.3"
56
+ },
57
+ "engines": {
58
+ "node": ">=18.0.0"
59
+ }
60
+ }
@@ -0,0 +1,150 @@
1
+ syntax = "proto3";
2
+
3
+ package permissions;
4
+
5
+ /**
6
+ * Permissions Service
7
+ * Provides gRPC endpoints for permission evaluation in a microservice architecture.
8
+ * Supports RBAC (Role-Based Access Control) and ABAC (Attribute-Based Access Control).
9
+ */
10
+ service PermissionsService {
11
+ /**
12
+ * Check a single permission for a user with optional ABAC context
13
+ */
14
+ rpc CheckPermission(CheckPermissionRequest) returns (CheckPermissionResponse);
15
+
16
+ /**
17
+ * Check multiple permissions at once for efficiency
18
+ */
19
+ rpc CheckBulkPermissions(CheckBulkPermissionsRequest) returns (CheckBulkPermissionsResponse);
20
+
21
+ /**
22
+ * Get all effective permissions for a user (computed from roles + custom assignments)
23
+ */
24
+ rpc GetEffectivePermissions(GetEffectivePermissionsRequest) returns (GetEffectivePermissionsResponse);
25
+
26
+ /**
27
+ * Simple boolean check - does user have this permission?
28
+ */
29
+ rpc HasPermission(HasPermissionRequest) returns (HasPermissionResponse);
30
+
31
+ /**
32
+ * Check if user has ALL of the specified permissions
33
+ */
34
+ rpc HasAllPermissions(HasMultiplePermissionsRequest) returns (HasPermissionResponse);
35
+
36
+ /**
37
+ * Check if user has ANY of the specified permissions
38
+ */
39
+ rpc HasAnyPermission(HasMultiplePermissionsRequest) returns (HasPermissionResponse);
40
+ }
41
+
42
+ // ============================================================================
43
+ // Request Messages
44
+ // ============================================================================
45
+
46
+ message CheckPermissionRequest {
47
+ string user_id = 1;
48
+ string permission_code = 2;
49
+ optional ResourceContext resource_context = 3;
50
+ optional RequestContext request_context = 4;
51
+ }
52
+
53
+ message CheckBulkPermissionsRequest {
54
+ string user_id = 1;
55
+ repeated string permission_codes = 2;
56
+ optional ResourceContext resource_context = 3;
57
+ optional RequestContext request_context = 4;
58
+ }
59
+
60
+ message GetEffectivePermissionsRequest {
61
+ string user_id = 1;
62
+ }
63
+
64
+ message HasPermissionRequest {
65
+ string user_id = 1;
66
+ string permission_code = 2;
67
+ }
68
+
69
+ message HasMultiplePermissionsRequest {
70
+ string user_id = 1;
71
+ repeated string permission_codes = 2;
72
+ }
73
+
74
+ // ============================================================================
75
+ // Response Messages
76
+ // ============================================================================
77
+
78
+ message CheckPermissionResponse {
79
+ bool allowed = 1;
80
+ EvaluationSource source = 2;
81
+ repeated string matched_roles = 3;
82
+ repeated string matched_policies = 4;
83
+ string reason = 5;
84
+ int32 evaluation_time_ms = 6;
85
+ }
86
+
87
+ message CheckBulkPermissionsResponse {
88
+ map<string, CheckPermissionResponse> results = 1;
89
+ int32 total_time_ms = 2;
90
+ }
91
+
92
+ message GetEffectivePermissionsResponse {
93
+ repeated string permissions = 1;
94
+ repeated RoleInfo roles = 2;
95
+ int32 version = 3;
96
+ string computed_at = 4;
97
+ }
98
+
99
+ message HasPermissionResponse {
100
+ bool has_permission = 1;
101
+ }
102
+
103
+ // ============================================================================
104
+ // Shared Types
105
+ // ============================================================================
106
+
107
+ /**
108
+ * Source of the permission decision
109
+ */
110
+ enum EvaluationSource {
111
+ EVALUATION_SOURCE_UNSPECIFIED = 0;
112
+ EVALUATION_SOURCE_RBAC = 1;
113
+ EVALUATION_SOURCE_ABAC = 2;
114
+ EVALUATION_SOURCE_BREAK_GLASS = 3;
115
+ EVALUATION_SOURCE_DENIED = 4;
116
+ }
117
+
118
+ /**
119
+ * Role information
120
+ */
121
+ message RoleInfo {
122
+ string id = 1;
123
+ string code = 2;
124
+ string name = 3;
125
+ bool is_system = 4;
126
+ }
127
+
128
+ /**
129
+ * Resource context for ABAC evaluation
130
+ * Contains attributes about the resource being accessed
131
+ */
132
+ message ResourceContext {
133
+ optional string id = 1;
134
+ optional string type = 2;
135
+ optional string owner_id = 3;
136
+ optional string department = 4;
137
+ map<string, string> attributes = 5;
138
+ }
139
+
140
+ /**
141
+ * Request context for ABAC evaluation
142
+ * Contains attributes about the request itself
143
+ */
144
+ message RequestContext {
145
+ optional string ip = 1;
146
+ optional string user_agent = 2;
147
+ optional string method = 3;
148
+ optional string path = 4;
149
+ map<string, string> attributes = 5;
150
+ }