guardrail-core 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/dist/__tests__/autopilot.test.d.ts +7 -0
- package/dist/__tests__/autopilot.test.d.ts.map +1 -0
- package/dist/__tests__/autopilot.test.js +156 -0
- package/dist/__tests__/tier-config.test.d.ts +9 -0
- package/dist/__tests__/tier-config.test.d.ts.map +1 -0
- package/dist/__tests__/tier-config.test.js +230 -0
- package/dist/__tests__/utils/hash-inline.test.d.ts +2 -0
- package/dist/__tests__/utils/hash-inline.test.d.ts.map +1 -0
- package/dist/__tests__/utils/hash-inline.test.js +62 -0
- package/dist/__tests__/utils/hash.test.d.ts +3 -0
- package/dist/__tests__/utils/hash.test.d.ts.map +1 -0
- package/dist/__tests__/utils/hash.test.js +95 -0
- package/dist/__tests__/utils/simple.test.d.ts +1 -0
- package/dist/__tests__/utils/simple.test.d.ts.map +1 -0
- package/dist/__tests__/utils/simple.test.js +10 -0
- package/dist/__tests__/utils/utils-simple.test.d.ts +1 -0
- package/dist/__tests__/utils/utils-simple.test.d.ts.map +1 -0
- package/dist/__tests__/utils/utils-simple.test.js +6 -0
- package/dist/__tests__/utils/utils.test.d.ts +15 -0
- package/dist/__tests__/utils/utils.test.d.ts.map +1 -0
- package/dist/__tests__/utils/utils.test.js +172 -0
- package/dist/autopilot/autopilot-runner.d.ts +33 -0
- package/dist/autopilot/autopilot-runner.d.ts.map +1 -0
- package/dist/autopilot/autopilot-runner.js +479 -0
- package/dist/autopilot/index.d.ts +6 -0
- package/dist/autopilot/index.d.ts.map +1 -0
- package/dist/autopilot/index.js +25 -0
- package/dist/autopilot/types.d.ts +102 -0
- package/dist/autopilot/types.d.ts.map +1 -0
- package/dist/autopilot/types.js +18 -0
- package/dist/cache/index.d.ts +7 -0
- package/dist/cache/index.d.ts.map +1 -0
- package/dist/cache/index.js +22 -0
- package/dist/cache/redis-cache.d.ts +145 -0
- package/dist/cache/redis-cache.d.ts.map +1 -0
- package/dist/cache/redis-cache.js +459 -0
- package/dist/ci/github-actions.d.ts +77 -0
- package/dist/ci/github-actions.d.ts.map +1 -0
- package/dist/ci/github-actions.js +277 -0
- package/dist/ci/index.d.ts +12 -0
- package/dist/ci/index.d.ts.map +1 -0
- package/dist/ci/index.js +27 -0
- package/dist/ci/pre-commit.d.ts +65 -0
- package/dist/ci/pre-commit.d.ts.map +1 -0
- package/dist/ci/pre-commit.js +286 -0
- package/dist/entitlements.d.ts +149 -0
- package/dist/entitlements.d.ts.map +1 -0
- package/dist/entitlements.js +464 -0
- package/dist/env.d.ts +113 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +204 -0
- package/dist/fix-packs/__tests__/generate-fix-packs.test.d.ts +7 -0
- package/dist/fix-packs/__tests__/generate-fix-packs.test.d.ts.map +1 -0
- package/dist/fix-packs/__tests__/generate-fix-packs.test.js +250 -0
- package/dist/fix-packs/generate-fix-packs.d.ts +15 -0
- package/dist/fix-packs/generate-fix-packs.d.ts.map +1 -0
- package/dist/fix-packs/generate-fix-packs.js +505 -0
- package/dist/fix-packs/index.d.ts +8 -0
- package/dist/fix-packs/index.d.ts.map +1 -0
- package/dist/fix-packs/index.js +23 -0
- package/dist/fix-packs/types.d.ts +113 -0
- package/dist/fix-packs/types.d.ts.map +1 -0
- package/dist/fix-packs/types.js +71 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +28 -0
- package/dist/metrics/prometheus.d.ts +99 -0
- package/dist/metrics/prometheus.d.ts.map +1 -0
- package/dist/metrics/prometheus.js +306 -0
- package/dist/quota-ledger.d.ts +119 -0
- package/dist/quota-ledger.d.ts.map +1 -0
- package/dist/quota-ledger.js +462 -0
- package/dist/rbac/__tests__/permissions.test.d.ts +8 -0
- package/dist/rbac/__tests__/permissions.test.d.ts.map +1 -0
- package/dist/rbac/__tests__/permissions.test.js +350 -0
- package/dist/rbac/index.d.ts +9 -0
- package/dist/rbac/index.d.ts.map +1 -0
- package/dist/rbac/index.js +32 -0
- package/dist/rbac/permissions.d.ts +71 -0
- package/dist/rbac/permissions.d.ts.map +1 -0
- package/dist/rbac/permissions.js +247 -0
- package/dist/rbac/types.d.ts +69 -0
- package/dist/rbac/types.d.ts.map +1 -0
- package/dist/rbac/types.js +213 -0
- package/dist/tier-config.d.ts +203 -0
- package/dist/tier-config.d.ts.map +1 -0
- package/dist/tier-config.js +675 -0
- package/dist/types.d.ts +365 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/utils.d.ts +36 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +127 -0
- package/dist/verified-autofix/__tests__/format-validator.test.d.ts +11 -0
- package/dist/verified-autofix/__tests__/format-validator.test.d.ts.map +1 -0
- package/dist/verified-autofix/__tests__/format-validator.test.js +285 -0
- package/dist/verified-autofix/__tests__/pipeline.test.d.ts +11 -0
- package/dist/verified-autofix/__tests__/pipeline.test.d.ts.map +1 -0
- package/dist/verified-autofix/__tests__/pipeline.test.js +389 -0
- package/dist/verified-autofix/__tests__/repo-fingerprint.test.d.ts +11 -0
- package/dist/verified-autofix/__tests__/repo-fingerprint.test.d.ts.map +1 -0
- package/dist/verified-autofix/__tests__/repo-fingerprint.test.js +236 -0
- package/dist/verified-autofix/__tests__/workspace.test.d.ts +11 -0
- package/dist/verified-autofix/__tests__/workspace.test.d.ts.map +1 -0
- package/dist/verified-autofix/__tests__/workspace.test.js +314 -0
- package/dist/verified-autofix/format-validator.d.ts +101 -0
- package/dist/verified-autofix/format-validator.d.ts.map +1 -0
- package/dist/verified-autofix/format-validator.js +446 -0
- package/dist/verified-autofix/index.d.ts +14 -0
- package/dist/verified-autofix/index.d.ts.map +1 -0
- package/dist/verified-autofix/index.js +39 -0
- package/dist/verified-autofix/pipeline.d.ts +68 -0
- package/dist/verified-autofix/pipeline.d.ts.map +1 -0
- package/dist/verified-autofix/pipeline.js +330 -0
- package/dist/verified-autofix/repo-fingerprint.d.ts +56 -0
- package/dist/verified-autofix/repo-fingerprint.d.ts.map +1 -0
- package/dist/verified-autofix/repo-fingerprint.js +396 -0
- package/dist/verified-autofix/workspace.d.ts +83 -0
- package/dist/verified-autofix/workspace.d.ts.map +1 -0
- package/dist/verified-autofix/workspace.js +454 -0
- package/dist/verified-autofix.d.ts +182 -0
- package/dist/verified-autofix.d.ts.map +1 -0
- package/dist/verified-autofix.js +1021 -0
- package/dist/visualization/dependency-graph.d.ts +79 -0
- package/dist/visualization/dependency-graph.d.ts.map +1 -0
- package/dist/visualization/dependency-graph.js +399 -0
- package/dist/visualization/index.d.ts +5 -0
- package/dist/visualization/index.d.ts.map +1 -0
- package/dist/visualization/index.js +20 -0
- package/package.json +29 -0
- package/src/__tests__/autopilot.test.ts +196 -0
- package/src/__tests__/tier-config.test.ts +289 -0
- package/src/__tests__/utils/hash-inline.test.ts +76 -0
- package/src/__tests__/utils/hash.test.ts +119 -0
- package/src/__tests__/utils/simple.test.ts +10 -0
- package/src/__tests__/utils/utils-simple.test.ts +5 -0
- package/src/__tests__/utils/utils.test.ts +203 -0
- package/src/autopilot/autopilot-runner.ts +503 -0
- package/src/autopilot/index.ts +6 -0
- package/src/autopilot/types.ts +119 -0
- package/src/cache/index.ts +7 -0
- package/src/cache/redis-cache.d.ts +155 -0
- package/src/cache/redis-cache.d.ts.map +1 -0
- package/src/cache/redis-cache.ts +517 -0
- package/src/ci/github-actions.ts +335 -0
- package/src/ci/index.ts +12 -0
- package/src/ci/pre-commit.ts +338 -0
- package/src/db/usage-schema.prisma +114 -0
- package/src/entitlements.ts +570 -0
- package/src/env.d.ts +68 -0
- package/src/env.d.ts.map +1 -0
- package/src/env.ts +247 -0
- package/src/fix-packs/__tests__/generate-fix-packs.test.ts +317 -0
- package/src/fix-packs/generate-fix-packs.ts +577 -0
- package/src/fix-packs/index.ts +8 -0
- package/src/fix-packs/types.ts +206 -0
- package/src/index.d.ts +7 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.ts +12 -0
- package/src/metrics/prometheus.d.ts +104 -0
- package/src/metrics/prometheus.d.ts.map +1 -0
- package/src/metrics/prometheus.ts +446 -0
- package/src/quota-ledger.ts +548 -0
- package/src/rbac/__tests__/permissions.test.ts +446 -0
- package/src/rbac/index.ts +46 -0
- package/src/rbac/permissions.ts +301 -0
- package/src/rbac/types.ts +298 -0
- package/src/tier-config.json +157 -0
- package/src/tier-config.ts +815 -0
- package/src/types.d.ts +365 -0
- package/src/types.d.ts.map +1 -0
- package/src/types.ts +441 -0
- package/src/utils.d.ts +36 -0
- package/src/utils.d.ts.map +1 -0
- package/src/utils.ts +140 -0
- package/src/verified-autofix/__tests__/format-validator.test.ts +335 -0
- package/src/verified-autofix/__tests__/pipeline.test.ts +419 -0
- package/src/verified-autofix/__tests__/repo-fingerprint.test.ts +241 -0
- package/src/verified-autofix/__tests__/workspace.test.ts +373 -0
- package/src/verified-autofix/format-validator.ts +517 -0
- package/src/verified-autofix/index.ts +63 -0
- package/src/verified-autofix/pipeline.ts +403 -0
- package/src/verified-autofix/repo-fingerprint.ts +459 -0
- package/src/verified-autofix/workspace.ts +531 -0
- package/src/verified-autofix.ts +1187 -0
- package/src/visualization/dependency-graph.d.ts +85 -0
- package/src/visualization/dependency-graph.d.ts.map +1 -0
- package/src/visualization/dependency-graph.ts +495 -0
- package/src/visualization/index.ts +5 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RBAC Permission Checker
|
|
4
|
+
*
|
|
5
|
+
* Core permission checking logic for role-based access control.
|
|
6
|
+
* Provides functions to verify user permissions against required permissions.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.roleHasPermission = roleHasPermission;
|
|
10
|
+
exports.hasPermission = hasPermission;
|
|
11
|
+
exports.hasAllPermissions = hasAllPermissions;
|
|
12
|
+
exports.hasAnyPermission = hasAnyPermission;
|
|
13
|
+
exports.compareRoles = compareRoles;
|
|
14
|
+
exports.isRoleAtLeast = isRoleAtLeast;
|
|
15
|
+
exports.getMinimumRoleForPermission = getMinimumRoleForPermission;
|
|
16
|
+
exports.getEffectivePermissions = getEffectivePermissions;
|
|
17
|
+
exports.checkTierAndPermission = checkTierAndPermission;
|
|
18
|
+
exports.generatePermissionMatrix = generatePermissionMatrix;
|
|
19
|
+
exports.canAssignRole = canAssignRole;
|
|
20
|
+
exports.canRemoveMember = canRemoveMember;
|
|
21
|
+
exports.isValidRole = isValidRole;
|
|
22
|
+
exports.isValidPermission = isValidPermission;
|
|
23
|
+
exports.parseRole = parseRole;
|
|
24
|
+
const tier_config_1 = require("../tier-config");
|
|
25
|
+
const types_1 = require("./types");
|
|
26
|
+
// ============================================================================
|
|
27
|
+
// PERMISSION CHECKING
|
|
28
|
+
// ============================================================================
|
|
29
|
+
/**
|
|
30
|
+
* Check if a role has a specific permission
|
|
31
|
+
*/
|
|
32
|
+
function roleHasPermission(role, permission) {
|
|
33
|
+
const permissions = types_1.ROLE_PERMISSIONS[role];
|
|
34
|
+
return permissions.includes(permission);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if a user has a specific permission based on their role
|
|
38
|
+
*/
|
|
39
|
+
function hasPermission(context, permission) {
|
|
40
|
+
if (!context.role || !types_1.ROLES.includes(context.role)) {
|
|
41
|
+
return {
|
|
42
|
+
allowed: false,
|
|
43
|
+
reason: 'Invalid or missing role',
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const hasAccess = roleHasPermission(context.role, permission);
|
|
47
|
+
if (!hasAccess) {
|
|
48
|
+
const requiredRole = getMinimumRoleForPermission(permission);
|
|
49
|
+
return {
|
|
50
|
+
allowed: false,
|
|
51
|
+
reason: `Permission '${permission}' requires at least '${requiredRole}' role`,
|
|
52
|
+
requiredRole,
|
|
53
|
+
requiredPermissions: [permission],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { allowed: true };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if a user has ALL of the specified permissions
|
|
60
|
+
*/
|
|
61
|
+
function hasAllPermissions(context, permissions) {
|
|
62
|
+
const missingPermissions = [];
|
|
63
|
+
for (const permission of permissions) {
|
|
64
|
+
if (!roleHasPermission(context.role, permission)) {
|
|
65
|
+
missingPermissions.push(permission);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (missingPermissions.length > 0) {
|
|
69
|
+
return {
|
|
70
|
+
allowed: false,
|
|
71
|
+
reason: `Missing required permissions: ${missingPermissions.join(', ')}`,
|
|
72
|
+
requiredPermissions: missingPermissions,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return { allowed: true };
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if a user has ANY of the specified permissions
|
|
79
|
+
*/
|
|
80
|
+
function hasAnyPermission(context, permissions) {
|
|
81
|
+
for (const permission of permissions) {
|
|
82
|
+
if (roleHasPermission(context.role, permission)) {
|
|
83
|
+
return { allowed: true };
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
allowed: false,
|
|
88
|
+
reason: `Requires at least one of: ${permissions.join(', ')}`,
|
|
89
|
+
requiredPermissions: permissions,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// ============================================================================
|
|
93
|
+
// ROLE COMPARISON
|
|
94
|
+
// ============================================================================
|
|
95
|
+
/**
|
|
96
|
+
* Compare two roles and return their relative hierarchy
|
|
97
|
+
* Returns positive if role1 > role2, negative if role1 < role2, 0 if equal
|
|
98
|
+
*/
|
|
99
|
+
function compareRoles(role1, role2) {
|
|
100
|
+
return types_1.ROLE_HIERARCHY[role1] - types_1.ROLE_HIERARCHY[role2];
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if role1 is higher than or equal to role2 in the hierarchy
|
|
104
|
+
*/
|
|
105
|
+
function isRoleAtLeast(role, minimumRole) {
|
|
106
|
+
return types_1.ROLE_HIERARCHY[role] >= types_1.ROLE_HIERARCHY[minimumRole];
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get the minimum role required for a specific permission
|
|
110
|
+
*/
|
|
111
|
+
function getMinimumRoleForPermission(permission) {
|
|
112
|
+
// Check roles from lowest to highest
|
|
113
|
+
const orderedRoles = ['viewer', 'compliance-auditor', 'dev', 'admin', 'owner'];
|
|
114
|
+
for (const role of orderedRoles) {
|
|
115
|
+
if (roleHasPermission(role, permission)) {
|
|
116
|
+
return role;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// Default to owner if permission not found
|
|
120
|
+
return 'owner';
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get all permissions for a role (including inherited)
|
|
124
|
+
*/
|
|
125
|
+
function getEffectivePermissions(role) {
|
|
126
|
+
return [...types_1.ROLE_PERMISSIONS[role]];
|
|
127
|
+
}
|
|
128
|
+
// ============================================================================
|
|
129
|
+
// TIER-BASED RESTRICTIONS
|
|
130
|
+
// ============================================================================
|
|
131
|
+
/**
|
|
132
|
+
* Check if a tier allows a specific operation with RBAC
|
|
133
|
+
*/
|
|
134
|
+
function checkTierAndPermission(context, permission, requiredTier) {
|
|
135
|
+
// First check permission
|
|
136
|
+
const permissionCheck = hasPermission(context, permission);
|
|
137
|
+
if (!permissionCheck.allowed) {
|
|
138
|
+
return permissionCheck;
|
|
139
|
+
}
|
|
140
|
+
// Then check tier if provided
|
|
141
|
+
if (context.tier) {
|
|
142
|
+
const userTierIndex = tier_config_1.TIER_ORDER.indexOf(context.tier);
|
|
143
|
+
const requiredTierIndex = tier_config_1.TIER_ORDER.indexOf(requiredTier);
|
|
144
|
+
if (userTierIndex < requiredTierIndex) {
|
|
145
|
+
return {
|
|
146
|
+
allowed: false,
|
|
147
|
+
reason: `This feature requires ${requiredTier} tier or higher`,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return { allowed: true };
|
|
152
|
+
}
|
|
153
|
+
// ============================================================================
|
|
154
|
+
// PERMISSION MATRIX
|
|
155
|
+
// ============================================================================
|
|
156
|
+
/**
|
|
157
|
+
* Generate a permission matrix for UI display
|
|
158
|
+
*/
|
|
159
|
+
function generatePermissionMatrix() {
|
|
160
|
+
const matrix = {};
|
|
161
|
+
for (const role of types_1.ROLES) {
|
|
162
|
+
matrix[role] = {};
|
|
163
|
+
for (const permission of types_1.PERMISSIONS) {
|
|
164
|
+
matrix[role][permission] = roleHasPermission(role, permission);
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return {
|
|
168
|
+
roles: [...types_1.ROLES],
|
|
169
|
+
permissions: [...types_1.PERMISSIONS],
|
|
170
|
+
matrix,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
// ============================================================================
|
|
174
|
+
// ROLE ASSIGNMENT VALIDATION
|
|
175
|
+
// ============================================================================
|
|
176
|
+
/**
|
|
177
|
+
* Check if a user can assign a specific role to another user
|
|
178
|
+
* Users can only assign roles lower than their own
|
|
179
|
+
*/
|
|
180
|
+
function canAssignRole(assignerRole, targetRole) {
|
|
181
|
+
// Must have assign_roles permission
|
|
182
|
+
if (!roleHasPermission(assignerRole, 'assign_roles')) {
|
|
183
|
+
return {
|
|
184
|
+
allowed: false,
|
|
185
|
+
reason: 'You do not have permission to assign roles',
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
// Cannot assign a role equal to or higher than your own (except owner can assign admin)
|
|
189
|
+
if (assignerRole === 'owner') {
|
|
190
|
+
return { allowed: true };
|
|
191
|
+
}
|
|
192
|
+
if (types_1.ROLE_HIERARCHY[targetRole] >= types_1.ROLE_HIERARCHY[assignerRole]) {
|
|
193
|
+
return {
|
|
194
|
+
allowed: false,
|
|
195
|
+
reason: `Cannot assign role '${targetRole}' - must be lower than your role '${assignerRole}'`,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return { allowed: true };
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* Check if a user can remove another user from the team
|
|
202
|
+
*/
|
|
203
|
+
function canRemoveMember(removerRole, targetRole) {
|
|
204
|
+
// Must have remove_members permission
|
|
205
|
+
if (!roleHasPermission(removerRole, 'remove_members')) {
|
|
206
|
+
return {
|
|
207
|
+
allowed: false,
|
|
208
|
+
reason: 'You do not have permission to remove members',
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
// Cannot remove owner
|
|
212
|
+
if (targetRole === 'owner') {
|
|
213
|
+
return {
|
|
214
|
+
allowed: false,
|
|
215
|
+
reason: 'Cannot remove the team owner',
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
// Cannot remove someone with equal or higher role (unless owner)
|
|
219
|
+
if (removerRole !== 'owner' && types_1.ROLE_HIERARCHY[targetRole] >= types_1.ROLE_HIERARCHY[removerRole]) {
|
|
220
|
+
return {
|
|
221
|
+
allowed: false,
|
|
222
|
+
reason: `Cannot remove a member with role '${targetRole}' - must have a lower role than yours`,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
return { allowed: true };
|
|
226
|
+
}
|
|
227
|
+
// ============================================================================
|
|
228
|
+
// VALIDATION UTILITIES
|
|
229
|
+
// ============================================================================
|
|
230
|
+
/**
|
|
231
|
+
* Validate if a string is a valid role
|
|
232
|
+
*/
|
|
233
|
+
function isValidRole(role) {
|
|
234
|
+
return types_1.ROLES.includes(role);
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Validate if a string is a valid permission
|
|
238
|
+
*/
|
|
239
|
+
function isValidPermission(permission) {
|
|
240
|
+
return types_1.PERMISSIONS.includes(permission);
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Get role from string with validation
|
|
244
|
+
*/
|
|
245
|
+
function parseRole(role) {
|
|
246
|
+
return isValidRole(role) ? role : null;
|
|
247
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RBAC Type Definitions
|
|
3
|
+
*
|
|
4
|
+
* Core types for Role-Based Access Control system.
|
|
5
|
+
* Defines roles, permissions, and related interfaces.
|
|
6
|
+
*/
|
|
7
|
+
export declare const ROLES: readonly ["owner", "admin", "dev", "viewer", "compliance-auditor"];
|
|
8
|
+
export type Role = typeof ROLES[number];
|
|
9
|
+
/** Role hierarchy for permission inheritance (higher index = more permissions) */
|
|
10
|
+
export declare const ROLE_HIERARCHY: Record<Role, number>;
|
|
11
|
+
export declare const PERMISSIONS: readonly ["manage_team", "invite_members", "remove_members", "assign_roles", "view_audit", "export_audit", "manage_compliance", "view_compliance", "view_reports", "export_reports", "create_reports", "run_scan", "run_reality", "run_autopilot", "run_fix", "run_gate", "view_policies", "manage_policies", "create_policies", "view_projects", "create_projects", "delete_projects", "manage_project_settings", "manage_api_keys", "view_api_keys", "manage_webhooks", "manage_integrations", "view_billing", "manage_billing", "view_dashboard", "admin_settings"];
|
|
12
|
+
export type Permission = typeof PERMISSIONS[number];
|
|
13
|
+
/**
|
|
14
|
+
* Default permissions for each role.
|
|
15
|
+
* Roles inherit permissions from lower roles in the hierarchy.
|
|
16
|
+
*/
|
|
17
|
+
export declare const ROLE_PERMISSIONS: Record<Role, Permission[]>;
|
|
18
|
+
export interface RoleAssignment {
|
|
19
|
+
userId: string;
|
|
20
|
+
teamId: string;
|
|
21
|
+
role: Role;
|
|
22
|
+
assignedBy: string;
|
|
23
|
+
assignedAt: Date;
|
|
24
|
+
}
|
|
25
|
+
export interface PermissionCheck {
|
|
26
|
+
allowed: boolean;
|
|
27
|
+
reason?: string;
|
|
28
|
+
requiredRole?: Role;
|
|
29
|
+
requiredPermissions?: Permission[];
|
|
30
|
+
}
|
|
31
|
+
export interface TeamMemberWithRole {
|
|
32
|
+
id: string;
|
|
33
|
+
userId: string;
|
|
34
|
+
email: string;
|
|
35
|
+
name: string;
|
|
36
|
+
role: Role;
|
|
37
|
+
joinedAt: Date;
|
|
38
|
+
lastActive?: Date;
|
|
39
|
+
}
|
|
40
|
+
export interface TeamInvitation {
|
|
41
|
+
id: string;
|
|
42
|
+
teamId: string;
|
|
43
|
+
email: string;
|
|
44
|
+
role: Role;
|
|
45
|
+
invitedBy: string;
|
|
46
|
+
expiresAt: Date;
|
|
47
|
+
status: 'pending' | 'accepted' | 'expired' | 'revoked';
|
|
48
|
+
}
|
|
49
|
+
export interface RBACContext {
|
|
50
|
+
userId: string;
|
|
51
|
+
teamId: string;
|
|
52
|
+
role: Role;
|
|
53
|
+
permissions: Permission[];
|
|
54
|
+
tier?: string;
|
|
55
|
+
}
|
|
56
|
+
export interface PermissionMatrix {
|
|
57
|
+
roles: Role[];
|
|
58
|
+
permissions: Permission[];
|
|
59
|
+
matrix: Record<Role, Record<Permission, boolean>>;
|
|
60
|
+
}
|
|
61
|
+
export interface RoleMetadata {
|
|
62
|
+
name: Role;
|
|
63
|
+
displayName: string;
|
|
64
|
+
description: string;
|
|
65
|
+
color: string;
|
|
66
|
+
icon: string;
|
|
67
|
+
}
|
|
68
|
+
export declare const ROLE_METADATA: Record<Role, RoleMetadata>;
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/rbac/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,eAAO,MAAM,KAAK,oEAAqE,CAAC;AACxF,MAAM,MAAM,IAAI,GAAG,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC;AAExC,kFAAkF;AAClF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAM/C,CAAC;AAMF,eAAO,MAAM,WAAW,wiBAiDd,CAAC;AAEX,MAAM,MAAM,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAMpD;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,CA0GvD,CAAC;AAMF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,mBAAmB,CAAC,EAAE,UAAU,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,CAAC;IACf,UAAU,CAAC,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;CACxD;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;CACnD;AAMD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,IAAI,EAAE,YAAY,CAoCpD,CAAC"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RBAC Type Definitions
|
|
4
|
+
*
|
|
5
|
+
* Core types for Role-Based Access Control system.
|
|
6
|
+
* Defines roles, permissions, and related interfaces.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ROLE_METADATA = exports.ROLE_PERMISSIONS = exports.PERMISSIONS = exports.ROLE_HIERARCHY = exports.ROLES = void 0;
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// ROLES
|
|
12
|
+
// ============================================================================
|
|
13
|
+
exports.ROLES = ['owner', 'admin', 'dev', 'viewer', 'compliance-auditor'];
|
|
14
|
+
/** Role hierarchy for permission inheritance (higher index = more permissions) */
|
|
15
|
+
exports.ROLE_HIERARCHY = {
|
|
16
|
+
'viewer': 0,
|
|
17
|
+
'compliance-auditor': 1,
|
|
18
|
+
'dev': 2,
|
|
19
|
+
'admin': 3,
|
|
20
|
+
'owner': 4,
|
|
21
|
+
};
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// PERMISSIONS
|
|
24
|
+
// ============================================================================
|
|
25
|
+
exports.PERMISSIONS = [
|
|
26
|
+
// Team Management
|
|
27
|
+
'manage_team',
|
|
28
|
+
'invite_members',
|
|
29
|
+
'remove_members',
|
|
30
|
+
'assign_roles',
|
|
31
|
+
// Audit & Compliance
|
|
32
|
+
'view_audit',
|
|
33
|
+
'export_audit',
|
|
34
|
+
'manage_compliance',
|
|
35
|
+
'view_compliance',
|
|
36
|
+
// Reports
|
|
37
|
+
'view_reports',
|
|
38
|
+
'export_reports',
|
|
39
|
+
'create_reports',
|
|
40
|
+
// Operations
|
|
41
|
+
'run_scan',
|
|
42
|
+
'run_reality',
|
|
43
|
+
'run_autopilot',
|
|
44
|
+
'run_fix',
|
|
45
|
+
'run_gate',
|
|
46
|
+
// Policies
|
|
47
|
+
'view_policies',
|
|
48
|
+
'manage_policies',
|
|
49
|
+
'create_policies',
|
|
50
|
+
// Projects
|
|
51
|
+
'view_projects',
|
|
52
|
+
'create_projects',
|
|
53
|
+
'delete_projects',
|
|
54
|
+
'manage_project_settings',
|
|
55
|
+
// API & Integrations
|
|
56
|
+
'manage_api_keys',
|
|
57
|
+
'view_api_keys',
|
|
58
|
+
'manage_webhooks',
|
|
59
|
+
'manage_integrations',
|
|
60
|
+
// Billing
|
|
61
|
+
'view_billing',
|
|
62
|
+
'manage_billing',
|
|
63
|
+
// Admin
|
|
64
|
+
'view_dashboard',
|
|
65
|
+
'admin_settings',
|
|
66
|
+
];
|
|
67
|
+
// ============================================================================
|
|
68
|
+
// ROLE-PERMISSION MAPPING
|
|
69
|
+
// ============================================================================
|
|
70
|
+
/**
|
|
71
|
+
* Default permissions for each role.
|
|
72
|
+
* Roles inherit permissions from lower roles in the hierarchy.
|
|
73
|
+
*/
|
|
74
|
+
exports.ROLE_PERMISSIONS = {
|
|
75
|
+
'viewer': [
|
|
76
|
+
'view_dashboard',
|
|
77
|
+
'view_projects',
|
|
78
|
+
'view_reports',
|
|
79
|
+
'view_compliance',
|
|
80
|
+
'view_policies',
|
|
81
|
+
],
|
|
82
|
+
'compliance-auditor': [
|
|
83
|
+
// Inherits viewer permissions
|
|
84
|
+
'view_dashboard',
|
|
85
|
+
'view_projects',
|
|
86
|
+
'view_reports',
|
|
87
|
+
'view_compliance',
|
|
88
|
+
'view_policies',
|
|
89
|
+
// Additional audit permissions
|
|
90
|
+
'view_audit',
|
|
91
|
+
'export_audit',
|
|
92
|
+
'export_reports',
|
|
93
|
+
],
|
|
94
|
+
'dev': [
|
|
95
|
+
// Inherits viewer permissions
|
|
96
|
+
'view_dashboard',
|
|
97
|
+
'view_projects',
|
|
98
|
+
'view_reports',
|
|
99
|
+
'view_compliance',
|
|
100
|
+
'view_policies',
|
|
101
|
+
// Dev operations
|
|
102
|
+
'run_scan',
|
|
103
|
+
'run_reality',
|
|
104
|
+
'run_fix',
|
|
105
|
+
'run_gate',
|
|
106
|
+
'create_projects',
|
|
107
|
+
'view_api_keys',
|
|
108
|
+
],
|
|
109
|
+
'admin': [
|
|
110
|
+
// Inherits dev permissions
|
|
111
|
+
'view_dashboard',
|
|
112
|
+
'view_projects',
|
|
113
|
+
'view_reports',
|
|
114
|
+
'view_compliance',
|
|
115
|
+
'view_policies',
|
|
116
|
+
'run_scan',
|
|
117
|
+
'run_reality',
|
|
118
|
+
'run_fix',
|
|
119
|
+
'run_gate',
|
|
120
|
+
'create_projects',
|
|
121
|
+
'view_api_keys',
|
|
122
|
+
// Admin permissions
|
|
123
|
+
'manage_team',
|
|
124
|
+
'invite_members',
|
|
125
|
+
'remove_members',
|
|
126
|
+
'assign_roles',
|
|
127
|
+
'run_autopilot',
|
|
128
|
+
'manage_policies',
|
|
129
|
+
'create_policies',
|
|
130
|
+
'delete_projects',
|
|
131
|
+
'manage_project_settings',
|
|
132
|
+
'manage_api_keys',
|
|
133
|
+
'manage_webhooks',
|
|
134
|
+
'manage_integrations',
|
|
135
|
+
'view_audit',
|
|
136
|
+
'export_audit',
|
|
137
|
+
'export_reports',
|
|
138
|
+
'create_reports',
|
|
139
|
+
'manage_compliance',
|
|
140
|
+
'view_billing',
|
|
141
|
+
],
|
|
142
|
+
'owner': [
|
|
143
|
+
// All permissions
|
|
144
|
+
'manage_team',
|
|
145
|
+
'invite_members',
|
|
146
|
+
'remove_members',
|
|
147
|
+
'assign_roles',
|
|
148
|
+
'view_audit',
|
|
149
|
+
'export_audit',
|
|
150
|
+
'manage_compliance',
|
|
151
|
+
'view_compliance',
|
|
152
|
+
'view_reports',
|
|
153
|
+
'export_reports',
|
|
154
|
+
'create_reports',
|
|
155
|
+
'run_scan',
|
|
156
|
+
'run_reality',
|
|
157
|
+
'run_autopilot',
|
|
158
|
+
'run_fix',
|
|
159
|
+
'run_gate',
|
|
160
|
+
'view_policies',
|
|
161
|
+
'manage_policies',
|
|
162
|
+
'create_policies',
|
|
163
|
+
'view_projects',
|
|
164
|
+
'create_projects',
|
|
165
|
+
'delete_projects',
|
|
166
|
+
'manage_project_settings',
|
|
167
|
+
'manage_api_keys',
|
|
168
|
+
'view_api_keys',
|
|
169
|
+
'manage_webhooks',
|
|
170
|
+
'manage_integrations',
|
|
171
|
+
'view_billing',
|
|
172
|
+
'manage_billing',
|
|
173
|
+
'view_dashboard',
|
|
174
|
+
'admin_settings',
|
|
175
|
+
],
|
|
176
|
+
};
|
|
177
|
+
exports.ROLE_METADATA = {
|
|
178
|
+
'owner': {
|
|
179
|
+
name: 'owner',
|
|
180
|
+
displayName: 'Owner',
|
|
181
|
+
description: 'Full access to all features including billing and team deletion',
|
|
182
|
+
color: '#8B5CF6', // purple
|
|
183
|
+
icon: 'crown',
|
|
184
|
+
},
|
|
185
|
+
'admin': {
|
|
186
|
+
name: 'admin',
|
|
187
|
+
displayName: 'Admin',
|
|
188
|
+
description: 'Manage team members, settings, and run all operations',
|
|
189
|
+
color: '#3B82F6', // blue
|
|
190
|
+
icon: 'shield',
|
|
191
|
+
},
|
|
192
|
+
'dev': {
|
|
193
|
+
name: 'dev',
|
|
194
|
+
displayName: 'Developer',
|
|
195
|
+
description: 'Run scans, fixes, and manage projects',
|
|
196
|
+
color: '#10B981', // green
|
|
197
|
+
icon: 'code',
|
|
198
|
+
},
|
|
199
|
+
'viewer': {
|
|
200
|
+
name: 'viewer',
|
|
201
|
+
displayName: 'Viewer',
|
|
202
|
+
description: 'View-only access to dashboards and reports',
|
|
203
|
+
color: '#6B7280', // gray
|
|
204
|
+
icon: 'eye',
|
|
205
|
+
},
|
|
206
|
+
'compliance-auditor': {
|
|
207
|
+
name: 'compliance-auditor',
|
|
208
|
+
displayName: 'Compliance Auditor',
|
|
209
|
+
description: 'View and export audit logs and compliance reports',
|
|
210
|
+
color: '#F59E0B', // amber
|
|
211
|
+
icon: 'clipboard-check',
|
|
212
|
+
},
|
|
213
|
+
};
|