@nest-boot/row-level-security 7.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 (118) hide show
  1. package/LICENSE +21 -0
  2. package/dist/decorators/policy.decorator.d.ts +18 -0
  3. package/dist/decorators/policy.decorator.js +257 -0
  4. package/dist/decorators/policy.decorator.js.map +1 -0
  5. package/dist/decorators/policy.decorator.spec.d.ts +1 -0
  6. package/dist/decorators/policy.decorator.spec.js +498 -0
  7. package/dist/decorators/policy.decorator.spec.js.map +1 -0
  8. package/dist/enums/policy-command.enum.d.ts +13 -0
  9. package/dist/enums/policy-command.enum.js +18 -0
  10. package/dist/enums/policy-command.enum.js.map +1 -0
  11. package/dist/enums/policy-mode.enum.d.ts +7 -0
  12. package/dist/enums/policy-mode.enum.js +12 -0
  13. package/dist/enums/policy-mode.enum.js.map +1 -0
  14. package/dist/index.d.ts +9 -0
  15. package/dist/index.js +26 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/index.spec.d.ts +1 -0
  18. package/dist/index.spec.js +70 -0
  19. package/dist/index.spec.js.map +1 -0
  20. package/dist/interfaces/index.d.ts +5 -0
  21. package/dist/interfaces/index.js +21 -0
  22. package/dist/interfaces/index.js.map +1 -0
  23. package/dist/interfaces/policy-metadata.interface.d.ts +62 -0
  24. package/dist/interfaces/policy-metadata.interface.js +3 -0
  25. package/dist/interfaces/policy-metadata.interface.js.map +1 -0
  26. package/dist/interfaces/policy-options.interface.d.ts +21 -0
  27. package/dist/interfaces/policy-options.interface.js +3 -0
  28. package/dist/interfaces/policy-options.interface.js.map +1 -0
  29. package/dist/interfaces/policy-sql-options.interface.d.ts +21 -0
  30. package/dist/interfaces/policy-sql-options.interface.js +3 -0
  31. package/dist/interfaces/policy-sql-options.interface.js.map +1 -0
  32. package/dist/interfaces/row-level-security-migration-generator.interface.d.ts +65 -0
  33. package/dist/interfaces/row-level-security-migration-generator.interface.js +3 -0
  34. package/dist/interfaces/row-level-security-migration-generator.interface.js.map +1 -0
  35. package/dist/interfaces/row-level-security-options.interface.d.ts +18 -0
  36. package/dist/interfaces/row-level-security-options.interface.js +3 -0
  37. package/dist/interfaces/row-level-security-options.interface.js.map +1 -0
  38. package/dist/row-level-security-context.d.ts +14 -0
  39. package/dist/row-level-security-context.js +38 -0
  40. package/dist/row-level-security-context.js.map +1 -0
  41. package/dist/row-level-security-context.spec.d.ts +1 -0
  42. package/dist/row-level-security-context.spec.js +29 -0
  43. package/dist/row-level-security-context.spec.js.map +1 -0
  44. package/dist/row-level-security-entity-manager.d.ts +22 -0
  45. package/dist/row-level-security-entity-manager.js +135 -0
  46. package/dist/row-level-security-entity-manager.js.map +1 -0
  47. package/dist/row-level-security-entity-manager.spec.d.ts +1 -0
  48. package/dist/row-level-security-entity-manager.spec.js +200 -0
  49. package/dist/row-level-security-entity-manager.spec.js.map +1 -0
  50. package/dist/row-level-security-migration-generator.d.ts +14 -0
  51. package/dist/row-level-security-migration-generator.js +294 -0
  52. package/dist/row-level-security-migration-generator.js.map +1 -0
  53. package/dist/row-level-security-migration-generator.spec.d.ts +1 -0
  54. package/dist/row-level-security-migration-generator.spec.js +468 -0
  55. package/dist/row-level-security-migration-generator.spec.js.map +1 -0
  56. package/dist/row-level-security-migration.d.ts +11 -0
  57. package/dist/row-level-security-migration.js +28 -0
  58. package/dist/row-level-security-migration.js.map +1 -0
  59. package/dist/row-level-security-migration.spec.d.ts +1 -0
  60. package/dist/row-level-security-migration.spec.js +40 -0
  61. package/dist/row-level-security-migration.spec.js.map +1 -0
  62. package/dist/tsconfig.build.tsbuildinfo +1 -0
  63. package/dist/tsconfig.tsbuildinfo +1 -0
  64. package/dist/utils/assert-identifier.d.ts +2 -0
  65. package/dist/utils/assert-identifier.js +11 -0
  66. package/dist/utils/assert-identifier.js.map +1 -0
  67. package/dist/utils/assert-snake-case.d.ts +2 -0
  68. package/dist/utils/assert-snake-case.js +10 -0
  69. package/dist/utils/assert-snake-case.js.map +1 -0
  70. package/dist/utils/create-policy-bootstrap-sql-statements.d.ts +2 -0
  71. package/dist/utils/create-policy-bootstrap-sql-statements.js +17 -0
  72. package/dist/utils/create-policy-bootstrap-sql-statements.js.map +1 -0
  73. package/dist/utils/create-policy-down-sql.d.ts +3 -0
  74. package/dist/utils/create-policy-down-sql.js +30 -0
  75. package/dist/utils/create-policy-down-sql.js.map +1 -0
  76. package/dist/utils/create-policy-up-sql-statements.d.ts +3 -0
  77. package/dist/utils/create-policy-up-sql-statements.js +114 -0
  78. package/dist/utils/create-policy-up-sql-statements.js.map +1 -0
  79. package/dist/utils/default-row-level-security-options.d.ts +3 -0
  80. package/dist/utils/default-row-level-security-options.js +9 -0
  81. package/dist/utils/default-row-level-security-options.js.map +1 -0
  82. package/dist/utils/escape-sql-literal.d.ts +2 -0
  83. package/dist/utils/escape-sql-literal.js +8 -0
  84. package/dist/utils/escape-sql-literal.js.map +1 -0
  85. package/dist/utils/get-row-level-security-options.d.ts +8 -0
  86. package/dist/utils/get-row-level-security-options.js +9 -0
  87. package/dist/utils/get-row-level-security-options.js.map +1 -0
  88. package/dist/utils/index.d.ts +13 -0
  89. package/dist/utils/index.js +29 -0
  90. package/dist/utils/index.js.map +1 -0
  91. package/dist/utils/policy-migration-sql.spec.d.ts +1 -0
  92. package/dist/utils/policy-migration-sql.spec.js +168 -0
  93. package/dist/utils/policy-migration-sql.spec.js.map +1 -0
  94. package/dist/utils/policy-sql-options.d.ts +12 -0
  95. package/dist/utils/policy-sql-options.js +3 -0
  96. package/dist/utils/policy-sql-options.js.map +1 -0
  97. package/dist/utils/quote-identifier.d.ts +2 -0
  98. package/dist/utils/quote-identifier.js +10 -0
  99. package/dist/utils/quote-identifier.js.map +1 -0
  100. package/dist/utils/quote-qualified-identifier.d.ts +2 -0
  101. package/dist/utils/quote-qualified-identifier.js +9 -0
  102. package/dist/utils/quote-qualified-identifier.js.map +1 -0
  103. package/dist/utils/row-level-security-context-builder.d.ts +12 -0
  104. package/dist/utils/row-level-security-context-builder.js +40 -0
  105. package/dist/utils/row-level-security-context-builder.js.map +1 -0
  106. package/dist/utils/row-level-security-context-builder.spec.d.ts +1 -0
  107. package/dist/utils/row-level-security-context-builder.spec.js +40 -0
  108. package/dist/utils/row-level-security-context-builder.spec.js.map +1 -0
  109. package/dist/utils/row-level-security-context-builder.types.d.ts +10 -0
  110. package/dist/utils/row-level-security-context-builder.types.js +3 -0
  111. package/dist/utils/row-level-security-context-builder.types.js.map +1 -0
  112. package/dist/utils/row-level-security-options-state.d.ts +4 -0
  113. package/dist/utils/row-level-security-options-state.js +8 -0
  114. package/dist/utils/row-level-security-options-state.js.map +1 -0
  115. package/dist/utils/set-row-level-security-options.d.ts +3 -0
  116. package/dist/utils/set-row-level-security-options.js +13 -0
  117. package/dist/utils/set-row-level-security-options.js.map +1 -0
  118. package/package.json +77 -0
@@ -0,0 +1,498 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const policy_command_enum_1 = require("../enums/policy-command.enum");
10
+ const policy_mode_enum_1 = require("../enums/policy-mode.enum");
11
+ const policy_decorator_1 = require("./policy.decorator");
12
+ describe("Policy decorator", () => {
13
+ it("stores RLS policy metadata on the entity class", () => {
14
+ let WorkspaceMember = class WorkspaceMember {
15
+ };
16
+ WorkspaceMember = __decorate([
17
+ (0, policy_decorator_1.Policy)({
18
+ name: "workspace_member_user_select_policy",
19
+ command: policy_command_enum_1.PolicyCommand.SELECT,
20
+ using: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
21
+ })
22
+ ], WorkspaceMember);
23
+ expect((0, policy_decorator_1.getPolicyMetadata)(WorkspaceMember)).toEqual([
24
+ {
25
+ name: "workspace_member_user_select_policy",
26
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
27
+ command: policy_command_enum_1.PolicyCommand.SELECT,
28
+ using: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
29
+ roles: [],
30
+ },
31
+ ]);
32
+ });
33
+ it("keeps multiple policies in declaration order", () => {
34
+ let WorkspaceMember = class WorkspaceMember {
35
+ };
36
+ WorkspaceMember = __decorate([
37
+ (0, policy_decorator_1.Policy)({
38
+ name: "workspace_member_user_select_policy",
39
+ command: policy_command_enum_1.PolicyCommand.SELECT,
40
+ using: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
41
+ }),
42
+ (0, policy_decorator_1.Policy)({
43
+ name: "tenant_access_policy",
44
+ command: policy_command_enum_1.PolicyCommand.ALL,
45
+ using: `((select app.get_context('tenant_id', null::bigint)) = "workspace_id")`,
46
+ withCheck: `((select app.get_context('tenant_id', null::bigint)) = "workspace_id")`,
47
+ })
48
+ ], WorkspaceMember);
49
+ expect((0, policy_decorator_1.getPolicyMetadata)(WorkspaceMember).map((policy) => policy.name)).toEqual(["tenant_access_policy", "workspace_member_user_select_policy"]);
50
+ });
51
+ it("stores restrictive policy mode", () => {
52
+ let WorkspaceMember = class WorkspaceMember {
53
+ };
54
+ WorkspaceMember = __decorate([
55
+ (0, policy_decorator_1.Policy)({
56
+ name: "tenant_required_policy",
57
+ mode: policy_mode_enum_1.PolicyMode.RESTRICTIVE,
58
+ using: `((select app.get_context('tenant_id', null::bigint)) is not null)`,
59
+ })
60
+ ], WorkspaceMember);
61
+ expect((0, policy_decorator_1.getPolicyMetadata)(WorkspaceMember)[0]).toMatchObject({
62
+ name: "tenant_required_policy",
63
+ mode: policy_mode_enum_1.PolicyMode.RESTRICTIVE,
64
+ command: policy_command_enum_1.PolicyCommand.ALL,
65
+ });
66
+ });
67
+ it("generates policy expressions from property and context", () => {
68
+ let WorkspaceMember = class WorkspaceMember {
69
+ };
70
+ WorkspaceMember = __decorate([
71
+ (0, policy_decorator_1.Policy)({
72
+ name: "workspace_member_user_select_policy",
73
+ command: policy_command_enum_1.PolicyCommand.SELECT,
74
+ property: "user",
75
+ context: "user_id",
76
+ })
77
+ ], WorkspaceMember);
78
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
79
+ entityName: "WorkspaceMember",
80
+ schemaName: "public",
81
+ tableName: "workspace_member",
82
+ properties: {
83
+ user: {
84
+ fieldNames: ["user_id"],
85
+ columnTypes: ["integer"],
86
+ targetMeta: {
87
+ primaryKeys: ["id"],
88
+ properties: {
89
+ id: {
90
+ columnTypes: ["bigint"],
91
+ },
92
+ },
93
+ },
94
+ },
95
+ },
96
+ })).toEqual([
97
+ {
98
+ name: "workspace_member_user_select_policy",
99
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
100
+ command: policy_command_enum_1.PolicyCommand.SELECT,
101
+ using: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
102
+ roles: [],
103
+ },
104
+ ]);
105
+ });
106
+ it("generates a default policy name from table, property, and command", () => {
107
+ let WorkspaceMember = class WorkspaceMember {
108
+ };
109
+ WorkspaceMember = __decorate([
110
+ (0, policy_decorator_1.Policy)({
111
+ command: policy_command_enum_1.PolicyCommand.SELECT,
112
+ property: "user",
113
+ context: "user_id",
114
+ })
115
+ ], WorkspaceMember);
116
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
117
+ entityName: "WorkspaceMember",
118
+ schemaName: "public",
119
+ tableName: "workspace_member",
120
+ properties: {
121
+ user: {
122
+ fieldNames: ["user_id"],
123
+ columnTypes: ["bigint"],
124
+ },
125
+ },
126
+ })).toEqual([
127
+ {
128
+ name: "workspace_member_user_select_policy",
129
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
130
+ command: policy_command_enum_1.PolicyCommand.SELECT,
131
+ using: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
132
+ roles: [],
133
+ },
134
+ ]);
135
+ });
136
+ it("generates a default policy name without a property", () => {
137
+ let WorkspaceMember = class WorkspaceMember {
138
+ };
139
+ WorkspaceMember = __decorate([
140
+ (0, policy_decorator_1.Policy)({
141
+ command: policy_command_enum_1.PolicyCommand.SELECT,
142
+ using: "true",
143
+ })
144
+ ], WorkspaceMember);
145
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
146
+ entityName: "WorkspaceMember",
147
+ schemaName: "public",
148
+ tableName: "workspace_member",
149
+ })).toEqual([
150
+ {
151
+ name: "workspace_member_select_policy",
152
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
153
+ command: policy_command_enum_1.PolicyCommand.SELECT,
154
+ using: "true",
155
+ roles: [],
156
+ },
157
+ ]);
158
+ });
159
+ it("uses explicit predicates over generated property context expressions", () => {
160
+ let WorkspaceMember = class WorkspaceMember {
161
+ };
162
+ WorkspaceMember = __decorate([
163
+ (0, policy_decorator_1.Policy)({
164
+ name: "workspace_member_write_policy",
165
+ property: "workspace",
166
+ context: "tenant_id",
167
+ using: "true",
168
+ withCheck: "false",
169
+ })
170
+ ], WorkspaceMember);
171
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
172
+ entityName: "WorkspaceMember",
173
+ schemaName: "public",
174
+ tableName: "workspace_member",
175
+ properties: {
176
+ workspace: {
177
+ fieldNames: ["workspace_id"],
178
+ columnTypes: ["bigint"],
179
+ },
180
+ },
181
+ })).toEqual([
182
+ {
183
+ name: "workspace_member_write_policy",
184
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
185
+ command: policy_command_enum_1.PolicyCommand.ALL,
186
+ using: "true",
187
+ withCheck: "false",
188
+ roles: [],
189
+ },
190
+ ]);
191
+ });
192
+ it("sorts roles in generated policy names", () => {
193
+ let WorkspaceMember = class WorkspaceMember {
194
+ };
195
+ WorkspaceMember = __decorate([
196
+ (0, policy_decorator_1.Policy)({
197
+ command: policy_command_enum_1.PolicyCommand.SELECT,
198
+ property: "user",
199
+ context: "user_id",
200
+ roles: ["memberRole", "adminRole"],
201
+ })
202
+ ], WorkspaceMember);
203
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
204
+ entityName: "WorkspaceMember",
205
+ schemaName: "public",
206
+ tableName: "workspace_member",
207
+ properties: {
208
+ user: {
209
+ fieldNames: ["user_id"],
210
+ columnTypes: ["bigint"],
211
+ },
212
+ },
213
+ })[0]).toMatchObject({
214
+ name: "workspace_member_user_select_admin_role_member_role_policy",
215
+ roles: ["memberRole", "adminRole"],
216
+ });
217
+ });
218
+ it("generates insert predicates from property and context", () => {
219
+ let WorkspaceMember = class WorkspaceMember {
220
+ };
221
+ WorkspaceMember = __decorate([
222
+ (0, policy_decorator_1.Policy)({
223
+ command: policy_command_enum_1.PolicyCommand.INSERT,
224
+ property: "user",
225
+ context: "user_id",
226
+ })
227
+ ], WorkspaceMember);
228
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
229
+ entityName: "WorkspaceMember",
230
+ schemaName: "public",
231
+ tableName: "workspace_member",
232
+ properties: {
233
+ user: {
234
+ fieldNames: ["user_id"],
235
+ columnTypes: ["bigint"],
236
+ },
237
+ },
238
+ })).toEqual([
239
+ {
240
+ name: "workspace_member_user_insert_policy",
241
+ mode: policy_mode_enum_1.PolicyMode.PERMISSIVE,
242
+ command: policy_command_enum_1.PolicyCommand.INSERT,
243
+ withCheck: `((select app.get_context('user_id', null::bigint)) = "user_id")`,
244
+ roles: [],
245
+ },
246
+ ]);
247
+ });
248
+ it("generates all-command predicates from property and context", () => {
249
+ let WorkspaceMember = class WorkspaceMember {
250
+ };
251
+ WorkspaceMember = __decorate([
252
+ (0, policy_decorator_1.Policy)({
253
+ property: "workspace",
254
+ context: "tenant_id",
255
+ })
256
+ ], WorkspaceMember);
257
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
258
+ entityName: "WorkspaceMember",
259
+ schemaName: "public",
260
+ tableName: "workspace_member",
261
+ properties: {
262
+ workspace: {
263
+ fieldNames: ["workspace_id"],
264
+ runtimeType: "number",
265
+ },
266
+ },
267
+ })[0]).toMatchObject({
268
+ name: "workspace_member_workspace_all_policy",
269
+ using: `((select app.get_context('tenant_id', null::integer)) = "workspace_id")`,
270
+ withCheck: `((select app.get_context('tenant_id', null::integer)) = "workspace_id")`,
271
+ });
272
+ });
273
+ it.each([
274
+ ["bigint", "bigint"],
275
+ ["boolean", "boolean"],
276
+ ["Date", "timestamp with time zone"],
277
+ ["text", "text"],
278
+ ["uuid", "uuid"],
279
+ ])("maps %s property types to policy context types", (type, postgresType) => {
280
+ let WorkspaceMember = class WorkspaceMember {
281
+ };
282
+ WorkspaceMember = __decorate([
283
+ (0, policy_decorator_1.Policy)({
284
+ command: policy_command_enum_1.PolicyCommand.SELECT,
285
+ property: "contextValue",
286
+ context: "context_value",
287
+ })
288
+ ], WorkspaceMember);
289
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
290
+ entityName: "WorkspaceMember",
291
+ schemaName: "public",
292
+ tableName: "workspace_member",
293
+ properties: {
294
+ contextValue: {
295
+ fieldName: "context_value",
296
+ type,
297
+ },
298
+ },
299
+ })[0]).toMatchObject({
300
+ using: `((select app.get_context('context_value', null::${postgresType})) = "context_value")`,
301
+ });
302
+ });
303
+ it("infers target primary key metadata from a primary property marker", () => {
304
+ let WorkspaceMember = class WorkspaceMember {
305
+ };
306
+ WorkspaceMember = __decorate([
307
+ (0, policy_decorator_1.Policy)({
308
+ command: policy_command_enum_1.PolicyCommand.SELECT,
309
+ property: "user",
310
+ context: "user_id",
311
+ })
312
+ ], WorkspaceMember);
313
+ expect((0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
314
+ entityName: "WorkspaceMember",
315
+ schemaName: "public",
316
+ tableName: "workspace_member",
317
+ properties: {
318
+ user: {
319
+ fieldNames: ["user_id"],
320
+ targetMeta: {
321
+ properties: {
322
+ id: {
323
+ primary: true,
324
+ runtimeType: "uuid",
325
+ },
326
+ },
327
+ },
328
+ },
329
+ },
330
+ })[0]).toMatchObject({
331
+ using: `((select app.get_context('user_id', null::uuid)) = "user_id")`,
332
+ });
333
+ });
334
+ it("rejects an empty policy name when provided", () => {
335
+ expect(() => (0, policy_decorator_1.Policy)({
336
+ name: "",
337
+ using: `((select app.get_context('tenant_id', null::bigint)) = "workspace_id")`,
338
+ })).toThrow("Policy name is required");
339
+ });
340
+ it("rejects a select policy without using", () => {
341
+ expect(() => (0, policy_decorator_1.Policy)({
342
+ name: "tenant_access_policy",
343
+ command: policy_command_enum_1.PolicyCommand.SELECT,
344
+ })).toThrow("Policy using expression is required");
345
+ });
346
+ it("requires property and context to be provided together", () => {
347
+ expect(() => (0, policy_decorator_1.Policy)({
348
+ name: "tenant_access_policy",
349
+ property: "workspace",
350
+ })).toThrow("Policy property and context must be provided together");
351
+ });
352
+ it("rejects a select policy with withCheck", () => {
353
+ expect(() => (0, policy_decorator_1.Policy)({
354
+ name: "tenant_access_policy",
355
+ command: policy_command_enum_1.PolicyCommand.SELECT,
356
+ using: `((select app.get_context('tenant_id', null::bigint)) = "workspace_id")`,
357
+ withCheck: `((select app.get_context('tenant_id', null::bigint)) = "workspace_id")`,
358
+ })).toThrow("Policy withCheck is not allowed for select");
359
+ });
360
+ it.each([
361
+ [
362
+ "insert policy with using",
363
+ () => (0, policy_decorator_1.Policy)({
364
+ command: policy_command_enum_1.PolicyCommand.INSERT,
365
+ using: "true",
366
+ withCheck: "true",
367
+ }),
368
+ "Policy using is not allowed for insert",
369
+ ],
370
+ [
371
+ "insert policy without withCheck",
372
+ () => (0, policy_decorator_1.Policy)({
373
+ command: policy_command_enum_1.PolicyCommand.INSERT,
374
+ }),
375
+ "Policy withCheck expression is required",
376
+ ],
377
+ [
378
+ "all policy without predicates",
379
+ () => (0, policy_decorator_1.Policy)({
380
+ name: "workspace_member_all_policy",
381
+ }),
382
+ "Policy using or withCheck expression is required",
383
+ ],
384
+ ])("rejects %s", (_name, createPolicy, message) => {
385
+ expect(createPolicy).toThrow(message);
386
+ });
387
+ it.each([
388
+ [
389
+ "missing property metadata",
390
+ {
391
+ properties: {},
392
+ },
393
+ `Policy property "user" was not found on entity WorkspaceMember`,
394
+ ],
395
+ [
396
+ "multiple column names",
397
+ {
398
+ properties: {
399
+ user: {
400
+ fieldNames: ["user_id", "tenant_id"],
401
+ columnTypes: ["bigint"],
402
+ },
403
+ },
404
+ },
405
+ `Policy property "user" on entity WorkspaceMember must resolve to exactly one database column`,
406
+ ],
407
+ [
408
+ "target with multiple primary keys",
409
+ {
410
+ properties: {
411
+ user: {
412
+ fieldNames: ["user_id"],
413
+ targetMeta: {
414
+ primaryKeys: ["id", "tenantId"],
415
+ properties: {
416
+ id: {
417
+ columnTypes: ["bigint"],
418
+ },
419
+ tenantId: {
420
+ columnTypes: ["bigint"],
421
+ },
422
+ },
423
+ },
424
+ },
425
+ },
426
+ },
427
+ `Policy property "user" on entity WorkspaceMember must target an entity with exactly one primary key`,
428
+ ],
429
+ [
430
+ "target without primary key metadata",
431
+ {
432
+ properties: {
433
+ user: {
434
+ fieldNames: ["user_id"],
435
+ targetMeta: {
436
+ primaryKeys: ["id"],
437
+ properties: {},
438
+ },
439
+ },
440
+ },
441
+ },
442
+ `Policy property "user" on entity WorkspaceMember must expose target primary key metadata`,
443
+ ],
444
+ [
445
+ "multiple column types",
446
+ {
447
+ properties: {
448
+ user: {
449
+ fieldNames: ["user_id"],
450
+ columnTypes: ["bigint", "uuid"],
451
+ },
452
+ },
453
+ },
454
+ `Policy property "user" on entity WorkspaceMember must resolve to exactly one database column type`,
455
+ ],
456
+ [
457
+ "unsupported database column type",
458
+ {
459
+ properties: {
460
+ user: {
461
+ fieldNames: ["user_id"],
462
+ columnTypes: ["bigint; drop table users"],
463
+ },
464
+ },
465
+ },
466
+ `Policy property "user" on entity WorkspaceMember has an unsupported database column type: bigint; drop table users`,
467
+ ],
468
+ [
469
+ "missing database column type",
470
+ {
471
+ properties: {
472
+ user: {
473
+ fieldNames: ["user_id"],
474
+ type: "unknown",
475
+ },
476
+ },
477
+ },
478
+ `Policy property "user" on entity WorkspaceMember must expose a database column type`,
479
+ ],
480
+ ])("rejects generated policy for %s", (_name, metadata, message) => {
481
+ let WorkspaceMember = class WorkspaceMember {
482
+ };
483
+ WorkspaceMember = __decorate([
484
+ (0, policy_decorator_1.Policy)({
485
+ command: policy_command_enum_1.PolicyCommand.SELECT,
486
+ property: "user",
487
+ context: "user_id",
488
+ })
489
+ ], WorkspaceMember);
490
+ expect(() => (0, policy_decorator_1.getPolicyDefinitions)(WorkspaceMember, {
491
+ entityName: "WorkspaceMember",
492
+ schemaName: "public",
493
+ tableName: "workspace_member",
494
+ ...metadata,
495
+ })).toThrow(message);
496
+ });
497
+ });
498
+ //# sourceMappingURL=policy.decorator.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.decorator.spec.js","sourceRoot":"","sources":["../../src/decorators/policy.decorator.spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /** PostgreSQL row-level security policy command targets. */
2
+ export declare enum PolicyCommand {
3
+ /** Applies the policy to all supported commands. */
4
+ ALL = "all",
5
+ /** Applies the policy to SELECT statements. */
6
+ SELECT = "select",
7
+ /** Applies the policy to INSERT statements. */
8
+ INSERT = "insert",
9
+ /** Applies the policy to UPDATE statements. */
10
+ UPDATE = "update",
11
+ /** Applies the policy to DELETE statements. */
12
+ DELETE = "delete"
13
+ }
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolicyCommand = void 0;
4
+ /** PostgreSQL row-level security policy command targets. */
5
+ var PolicyCommand;
6
+ (function (PolicyCommand) {
7
+ /** Applies the policy to all supported commands. */
8
+ PolicyCommand["ALL"] = "all";
9
+ /** Applies the policy to SELECT statements. */
10
+ PolicyCommand["SELECT"] = "select";
11
+ /** Applies the policy to INSERT statements. */
12
+ PolicyCommand["INSERT"] = "insert";
13
+ /** Applies the policy to UPDATE statements. */
14
+ PolicyCommand["UPDATE"] = "update";
15
+ /** Applies the policy to DELETE statements. */
16
+ PolicyCommand["DELETE"] = "delete";
17
+ })(PolicyCommand || (exports.PolicyCommand = PolicyCommand = {}));
18
+ //# sourceMappingURL=policy-command.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-command.enum.js","sourceRoot":"","sources":["../../src/enums/policy-command.enum.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC5D,IAAY,aAWX;AAXD,WAAY,aAAa;IACvB,oDAAoD;IACpD,4BAAW,CAAA;IACX,+CAA+C;IAC/C,kCAAiB,CAAA;IACjB,+CAA+C;IAC/C,kCAAiB,CAAA;IACjB,+CAA+C;IAC/C,kCAAiB,CAAA;IACjB,+CAA+C;IAC/C,kCAAiB,CAAA;AACnB,CAAC,EAXW,aAAa,6BAAb,aAAa,QAWxB"}
@@ -0,0 +1,7 @@
1
+ /** PostgreSQL policy combination mode. */
2
+ export declare enum PolicyMode {
3
+ /** Allows access when any permissive policy grants it. */
4
+ PERMISSIVE = "permissive",
5
+ /** Requires this policy to pass in addition to permissive policies. */
6
+ RESTRICTIVE = "restrictive"
7
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PolicyMode = void 0;
4
+ /** PostgreSQL policy combination mode. */
5
+ var PolicyMode;
6
+ (function (PolicyMode) {
7
+ /** Allows access when any permissive policy grants it. */
8
+ PolicyMode["PERMISSIVE"] = "permissive";
9
+ /** Requires this policy to pass in addition to permissive policies. */
10
+ PolicyMode["RESTRICTIVE"] = "restrictive";
11
+ })(PolicyMode || (exports.PolicyMode = PolicyMode = {}));
12
+ //# sourceMappingURL=policy-mode.enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy-mode.enum.js","sourceRoot":"","sources":["../../src/enums/policy-mode.enum.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,IAAY,UAKX;AALD,WAAY,UAAU;IACpB,0DAA0D;IAC1D,uCAAyB,CAAA;IACzB,uEAAuE;IACvE,yCAA2B,CAAA;AAC7B,CAAC,EALW,UAAU,0BAAV,UAAU,QAKrB"}
@@ -0,0 +1,9 @@
1
+ export * from "./decorators/policy.decorator";
2
+ export * from "./enums/policy-command.enum";
3
+ export * from "./enums/policy-mode.enum";
4
+ export * from "./interfaces";
5
+ export * from "./row-level-security-context";
6
+ export * from "./row-level-security-entity-manager";
7
+ export * from "./row-level-security-migration";
8
+ export * from "./row-level-security-migration-generator";
9
+ export * from "./utils";
package/dist/index.js ADDED
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./decorators/policy.decorator"), exports);
18
+ __exportStar(require("./enums/policy-command.enum"), exports);
19
+ __exportStar(require("./enums/policy-mode.enum"), exports);
20
+ __exportStar(require("./interfaces"), exports);
21
+ __exportStar(require("./row-level-security-context"), exports);
22
+ __exportStar(require("./row-level-security-entity-manager"), exports);
23
+ __exportStar(require("./row-level-security-migration"), exports);
24
+ __exportStar(require("./row-level-security-migration-generator"), exports);
25
+ __exportStar(require("./utils"), exports);
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gEAA8C;AAC9C,8DAA4C;AAC5C,2DAAyC;AACzC,+CAA6B;AAC7B,+DAA6C;AAC7C,sEAAoD;AACpD,iEAA+C;AAC/C,2EAAyD;AACzD,0CAAwB"}
@@ -0,0 +1 @@
1
+ export {};