@rhino-dev/rhino-nestjs 4.2.0 → 4.3.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.
@@ -26,20 +26,32 @@ export declare function coercePermissions(raw: unknown): string[];
26
26
  * real array, a JSON-string array, or a comma-separated string.
27
27
  */
28
28
  export declare function matchesPermission(permission: string, granted: string[] | string | null | undefined): boolean;
29
+ /** The shared role-layer permissions for a single user_role row. */
30
+ export declare function rowRolePermissions(ur: any): string[];
31
+ /** The allow set contributed by a single user_role row (legacy ∪ granted ∪ role). */
32
+ export declare function rowAllowPermissions(ur: any): string[];
33
+ /** The deny set contributed by a single user_role row. */
34
+ export declare function rowDeniedPermissions(ur: any): string[];
29
35
  /**
30
36
  * Resolve the role slug for a user in a specific organization.
31
37
  * Expects a user object shaped like the Laravel user with userRoles relation.
32
38
  */
33
39
  export declare function resolveUserRoleSlug(user: any, organizationId: number | string | null | undefined): string | null;
34
40
  /**
35
- * Resolve permissions granted to a user in an organization context.
36
- * Tenant context → aggregates permissions from all user_roles entries
37
- * matching the organization.
38
- * No org context → returns the user's top-level permissions array.
41
+ * Resolve the ALLOW permissions granted to a user in an organization context.
42
+ * Tenant context → unions every user_roles entry's (legacy ∪ granted ∪ role
43
+ * layer) for the org.
44
+ * No org context → the user's top-level permissions ∪ grantedPermissions.
39
45
  */
40
46
  export declare function resolveUserPermissions(user: any, organizationId?: number | string | null): string[];
47
+ /**
48
+ * Resolve the DENY permissions for a user in an organization context. Deny
49
+ * always wins over the allow set.
50
+ */
51
+ export declare function resolveDeniedPermissions(user: any, organizationId?: number | string | null): string[];
41
52
  /**
42
53
  * Top-level permission check mirroring the Laravel `hasPermission` method.
54
+ * Applies deny-overrides: a denied permission is denied even under a role `*`.
43
55
  */
44
56
  export declare function userHasPermission(user: any, permission: string, organization?: {
45
57
  id: number | string;
@@ -2,8 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.coercePermissions = coercePermissions;
4
4
  exports.matchesPermission = matchesPermission;
5
+ exports.rowRolePermissions = rowRolePermissions;
6
+ exports.rowAllowPermissions = rowAllowPermissions;
7
+ exports.rowDeniedPermissions = rowDeniedPermissions;
5
8
  exports.resolveUserRoleSlug = resolveUserRoleSlug;
6
9
  exports.resolveUserPermissions = resolveUserPermissions;
10
+ exports.resolveDeniedPermissions = resolveDeniedPermissions;
7
11
  exports.userHasPermission = userHasPermission;
8
12
  /**
9
13
  * Coerce a raw permissions value into a string array.
@@ -66,6 +70,67 @@ function matchesPermission(permission, granted) {
66
70
  }
67
71
  return false;
68
72
  }
73
+ // ──────────────────────────────────────────────────────────────────────────
74
+ // Layered permissions (PERMISSIONS_DESIGN.md)
75
+ //
76
+ // effective = (role ∪ granted) − denied (deny always wins)
77
+ //
78
+ // - role → org_role_permissions[(org, role)].permissions (shared role layer)
79
+ // - granted → user_roles.granted_permissions (per-user additive)
80
+ // - denied → user_roles.denied_permissions (per-user subtractive)
81
+ // - legacy → user_roles.permissions (back-compat allow)
82
+ //
83
+ // The matcher reads these from the in-memory user object. `grantedPermissions`
84
+ // / `deniedPermissions` are scalar columns on user_roles (loaded automatically).
85
+ // The role layer is read from the row's `role.orgRolePermissions` (Prisma deep
86
+ // include), filtered to the row's own organization — or from a pre-resolved
87
+ // `rolePermissions` list if a service attached one.
88
+ // ──────────────────────────────────────────────────────────────────────────
89
+ function readOrgId(ur) {
90
+ return ur?.organizationId ?? ur?.organization_id;
91
+ }
92
+ /** The shared role-layer permissions for a single user_role row. */
93
+ function rowRolePermissions(ur) {
94
+ if (!ur)
95
+ return [];
96
+ // Pre-resolved by a service (e.g. raw-SQL consumers).
97
+ const direct = ur.rolePermissions ?? ur.role_permissions;
98
+ if (direct != null)
99
+ return coercePermissions(direct);
100
+ // From the role's org_role_permissions, scoped to this row's organization.
101
+ const orgId = readOrgId(ur);
102
+ const layers = ur.role?.orgRolePermissions ??
103
+ ur.role?.org_role_permissions ??
104
+ ur.orgRolePermissions ??
105
+ ur.org_role_permissions;
106
+ if (!Array.isArray(layers))
107
+ return [];
108
+ const acc = [];
109
+ for (const entry of layers) {
110
+ const entryOrg = entry?.organizationId ?? entry?.organization_id;
111
+ if (orgId == null || entryOrg === orgId) {
112
+ for (const p of coercePermissions(entry?.permissions))
113
+ acc.push(p);
114
+ }
115
+ }
116
+ return acc;
117
+ }
118
+ /** The allow set contributed by a single user_role row (legacy ∪ granted ∪ role). */
119
+ function rowAllowPermissions(ur) {
120
+ if (!ur)
121
+ return [];
122
+ return [
123
+ ...coercePermissions(ur.permissions),
124
+ ...coercePermissions(ur.grantedPermissions ?? ur.granted_permissions),
125
+ ...rowRolePermissions(ur),
126
+ ];
127
+ }
128
+ /** The deny set contributed by a single user_role row. */
129
+ function rowDeniedPermissions(ur) {
130
+ if (!ur)
131
+ return [];
132
+ return coercePermissions(ur.deniedPermissions ?? ur.denied_permissions);
133
+ }
69
134
  /**
70
135
  * Resolve the role slug for a user in a specific organization.
71
136
  * Expects a user object shaped like the Laravel user with userRoles relation.
@@ -83,19 +148,19 @@ function resolveUserRoleSlug(user, organizationId) {
83
148
  return null;
84
149
  }
85
150
  /**
86
- * Resolve permissions granted to a user in an organization context.
87
- * Tenant context → aggregates permissions from all user_roles entries
88
- * matching the organization.
89
- * No org context → returns the user's top-level permissions array.
151
+ * Resolve the ALLOW permissions granted to a user in an organization context.
152
+ * Tenant context → unions every user_roles entry's (legacy ∪ granted ∪ role
153
+ * layer) for the org.
154
+ * No org context → the user's top-level permissions ∪ grantedPermissions.
90
155
  */
91
156
  function resolveUserPermissions(user, organizationId) {
92
157
  if (!user)
93
158
  return [];
94
159
  // Group-membership enforcement (design §6): when the membership layer has
95
160
  // resolved the matching row(s), the permission source switches to that row
96
- // only. The guard attaches the resolved list as `__membershipPermissions`.
97
- // Absent (enforcement off) → fall through to the legacy heuristic, so
98
- // existing behavior is byte-for-byte unchanged.
161
+ // only. The guard attaches the resolved ALLOW list as `__membershipPermissions`.
162
+ // Absent (enforcement off) → fall through to the legacy heuristic, so existing
163
+ // behavior is byte-for-byte unchanged.
99
164
  if (Array.isArray(user.__membershipPermissions)) {
100
165
  return coercePermissions(user.__membershipPermissions);
101
166
  }
@@ -103,26 +168,52 @@ function resolveUserPermissions(user, organizationId) {
103
168
  const userRoles = user.userRoles ?? user.user_roles ?? [];
104
169
  const all = [];
105
170
  for (const ur of userRoles) {
106
- const orgId = ur.organizationId ?? ur.organization_id;
107
- if (orgId === organizationId) {
108
- // BP-008: coerce into an array first — value may arrive as a raw
109
- // JSON string from SQLite/MySQL or similar DBs without native arrays.
110
- for (const p of coercePermissions(ur.permissions))
171
+ if (readOrgId(ur) === organizationId) {
172
+ for (const p of rowAllowPermissions(ur))
173
+ all.push(p);
174
+ }
175
+ }
176
+ return all;
177
+ }
178
+ return [
179
+ ...coercePermissions(user.permissions),
180
+ ...coercePermissions(user.grantedPermissions ?? user.granted_permissions),
181
+ ];
182
+ }
183
+ /**
184
+ * Resolve the DENY permissions for a user in an organization context. Deny
185
+ * always wins over the allow set.
186
+ */
187
+ function resolveDeniedPermissions(user, organizationId) {
188
+ if (!user)
189
+ return [];
190
+ if (Array.isArray(user.__membershipDeniedPermissions)) {
191
+ return coercePermissions(user.__membershipDeniedPermissions);
192
+ }
193
+ if (organizationId != null) {
194
+ const userRoles = user.userRoles ?? user.user_roles ?? [];
195
+ const all = [];
196
+ for (const ur of userRoles) {
197
+ if (readOrgId(ur) === organizationId) {
198
+ for (const p of rowDeniedPermissions(ur))
111
199
  all.push(p);
112
200
  }
113
201
  }
114
202
  return all;
115
203
  }
116
- return coercePermissions(user.permissions);
204
+ return coercePermissions(user.deniedPermissions ?? user.denied_permissions);
117
205
  }
118
206
  /**
119
207
  * Top-level permission check mirroring the Laravel `hasPermission` method.
208
+ * Applies deny-overrides: a denied permission is denied even under a role `*`.
120
209
  */
121
210
  function userHasPermission(user, permission, organization) {
122
211
  if (!user)
123
212
  return false;
124
213
  const orgId = organization ? organization.id : null;
125
- const permissions = resolveUserPermissions(user, orgId);
126
- return matchesPermission(permission, permissions);
214
+ // Deny always wins.
215
+ if (matchesPermission(permission, resolveDeniedPermissions(user, orgId)))
216
+ return false;
217
+ return matchesPermission(permission, resolveUserPermissions(user, orgId));
127
218
  }
128
219
  //# sourceMappingURL=permission-matcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-matcher.js","sourceRoot":"","sources":["../../src/utils/permission-matcher.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-matcher.js","sourceRoot":"","sources":["../../src/utils/permission-matcher.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rhino-dev/rhino-nestjs",
3
- "version": "4.2.0",
3
+ "version": "4.3.0",
4
4
  "description": "Rhino for NestJS — auto-generated REST APIs from model definitions.",
5
5
  "author": "Bruno Cipolla <bruno@codalio.com>",
6
6
  "license": "MIT",