@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.
- package/README.md +290 -0
- package/dist/client/index.d.ts +3 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +19 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/permissions-client.module.d.ts +74 -0
- package/dist/client/permissions-client.module.d.ts.map +1 -0
- package/dist/client/permissions-client.module.js +109 -0
- package/dist/client/permissions-client.module.js.map +1 -0
- package/dist/client/permissions-grpc.client.d.ts +45 -0
- package/dist/client/permissions-grpc.client.d.ts.map +1 -0
- package/dist/client/permissions-grpc.client.js +182 -0
- package/dist/client/permissions-grpc.client.js.map +1 -0
- package/dist/constants.d.ts +44 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +48 -0
- package/dist/constants.js.map +1 -0
- package/dist/decorators/index.d.ts +2 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +18 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/require-permissions.decorator.d.ts +51 -0
- package/dist/decorators/require-permissions.decorator.d.ts.map +1 -0
- package/dist/decorators/require-permissions.decorator.js +69 -0
- package/dist/decorators/require-permissions.decorator.js.map +1 -0
- package/dist/guards/index.d.ts +2 -0
- package/dist/guards/index.d.ts.map +1 -0
- package/dist/guards/index.js +18 -0
- package/dist/guards/index.js.map +1 -0
- package/dist/guards/permissions.guard.d.ts +55 -0
- package/dist/guards/permissions.guard.d.ts.map +1 -0
- package/dist/guards/permissions.guard.js +139 -0
- package/dist/guards/permissions.guard.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/proto/permissions.proto +150 -0
- package/dist/types/evaluation.types.d.ts +80 -0
- package/dist/types/evaluation.types.d.ts.map +1 -0
- package/dist/types/evaluation.types.js +14 -0
- package/dist/types/evaluation.types.js.map +1 -0
- package/dist/types/grpc.types.d.ts +97 -0
- package/dist/types/grpc.types.d.ts.map +1 -0
- package/dist/types/grpc.types.js +15 -0
- package/dist/types/grpc.types.js.map +1 -0
- package/dist/types/index.d.ts +4 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +20 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/permission.types.d.ts +51 -0
- package/dist/types/permission.types.d.ts.map +1 -0
- package/dist/types/permission.types.js +8 -0
- package/dist/types/permission.types.js.map +1 -0
- package/package.json +60 -0
- 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
|
+
}
|