zenstack 1.0.0-beta.2 → 1.0.0-beta.21

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 (94) hide show
  1. package/README.md +16 -8
  2. package/cli/cli-util.js +1 -1
  3. package/cli/cli-util.js.map +1 -1
  4. package/cli/config.d.ts +1 -10
  5. package/cli/config.js +2 -7
  6. package/cli/config.js.map +1 -1
  7. package/cli/plugin-runner.d.ts +2 -1
  8. package/cli/plugin-runner.js +101 -47
  9. package/cli/plugin-runner.js.map +1 -1
  10. package/language-server/constants.d.ts +0 -4
  11. package/language-server/constants.js +1 -14
  12. package/language-server/constants.js.map +1 -1
  13. package/language-server/utils.d.ts +1 -10
  14. package/language-server/utils.js +1 -20
  15. package/language-server/utils.js.map +1 -1
  16. package/language-server/validator/attribute-application-validator.d.ts +15 -0
  17. package/language-server/validator/attribute-application-validator.js +246 -0
  18. package/language-server/validator/attribute-application-validator.js.map +1 -0
  19. package/language-server/validator/attribute-validator.d.ts +1 -1
  20. package/language-server/validator/attribute-validator.js +4 -1
  21. package/language-server/validator/attribute-validator.js.map +1 -1
  22. package/language-server/validator/datamodel-validator.js +13 -9
  23. package/language-server/validator/datamodel-validator.js.map +1 -1
  24. package/language-server/validator/enum-validator.js +3 -6
  25. package/language-server/validator/enum-validator.js.map +1 -1
  26. package/language-server/validator/expression-validator.js +70 -1
  27. package/language-server/validator/expression-validator.js.map +1 -1
  28. package/language-server/validator/function-decl-validator.d.ts +9 -0
  29. package/language-server/validator/function-decl-validator.js +13 -0
  30. package/language-server/validator/function-decl-validator.js.map +1 -0
  31. package/language-server/validator/function-invocation-validator.js +34 -9
  32. package/language-server/validator/function-invocation-validator.js.map +1 -1
  33. package/language-server/validator/utils.d.ts +2 -3
  34. package/language-server/validator/utils.js +3 -119
  35. package/language-server/validator/utils.js.map +1 -1
  36. package/language-server/validator/zmodel-validator.d.ts +2 -1
  37. package/language-server/validator/zmodel-validator.js +8 -3
  38. package/language-server/validator/zmodel-validator.js.map +1 -1
  39. package/language-server/zmodel-linker.d.ts +1 -0
  40. package/language-server/zmodel-linker.js +76 -26
  41. package/language-server/zmodel-linker.js.map +1 -1
  42. package/package.json +9 -16
  43. package/plugins/access-policy/expression-writer.d.ts +5 -0
  44. package/plugins/access-policy/expression-writer.js +154 -74
  45. package/plugins/access-policy/expression-writer.js.map +1 -1
  46. package/plugins/access-policy/policy-guard-generator.d.ts +8 -1
  47. package/plugins/access-policy/policy-guard-generator.js +296 -75
  48. package/plugins/access-policy/policy-guard-generator.js.map +1 -1
  49. package/plugins/model-meta/index.js +69 -5
  50. package/plugins/model-meta/index.js.map +1 -1
  51. package/plugins/plugin-utils.d.ts +4 -0
  52. package/plugins/plugin-utils.js +16 -1
  53. package/plugins/plugin-utils.js.map +1 -1
  54. package/plugins/prisma/prisma-builder.d.ts +3 -1
  55. package/plugins/prisma/prisma-builder.js +17 -16
  56. package/plugins/prisma/prisma-builder.js.map +1 -1
  57. package/plugins/prisma/schema-generator.d.ts +1 -3
  58. package/plugins/prisma/schema-generator.js +61 -84
  59. package/plugins/prisma/schema-generator.js.map +1 -1
  60. package/plugins/prisma/zmodel-code-generator.js +4 -2
  61. package/plugins/prisma/zmodel-code-generator.js.map +1 -1
  62. package/plugins/zod/generator.js +148 -19
  63. package/plugins/zod/generator.js.map +1 -1
  64. package/plugins/zod/index.d.ts +1 -1
  65. package/plugins/zod/transformer.d.ts +6 -5
  66. package/plugins/zod/transformer.js +172 -108
  67. package/plugins/zod/transformer.js.map +1 -1
  68. package/plugins/zod/types.d.ts +4 -1
  69. package/plugins/zod/utils/schema-gen.d.ts +3 -0
  70. package/plugins/zod/utils/schema-gen.js +188 -0
  71. package/plugins/zod/utils/schema-gen.js.map +1 -0
  72. package/res/stdlib.zmodel +121 -32
  73. package/telemetry.d.ts +1 -0
  74. package/telemetry.js +3 -1
  75. package/telemetry.js.map +1 -1
  76. package/utils/ast-utils.d.ts +1 -14
  77. package/utils/ast-utils.js +2 -72
  78. package/utils/ast-utils.js.map +1 -1
  79. package/utils/pkg-utils.js +1 -1
  80. package/utils/pkg-utils.js.map +1 -1
  81. package/utils/typescript-expression-transformer.d.ts +53 -0
  82. package/utils/typescript-expression-transformer.js +312 -0
  83. package/utils/typescript-expression-transformer.js.map +1 -0
  84. package/utils/version-utils.js +7 -2
  85. package/utils/version-utils.js.map +1 -1
  86. package/plugins/access-policy/typescript-expression-transformer.d.ts +0 -28
  87. package/plugins/access-policy/typescript-expression-transformer.js +0 -180
  88. package/plugins/access-policy/typescript-expression-transformer.js.map +0 -1
  89. package/plugins/access-policy/utils.d.ts +0 -5
  90. package/plugins/access-policy/utils.js +0 -14
  91. package/plugins/access-policy/utils.js.map +0 -1
  92. package/plugins/access-policy/zod-schema-generator.d.ts +0 -12
  93. package/plugins/access-policy/zod-schema-generator.js +0 -160
  94. package/plugins/access-policy/zod-schema-generator.js.map +0 -1
@@ -13,19 +13,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const ast_1 = require("@zenstackhq/language/ast");
16
+ const runtime_1 = require("@zenstackhq/runtime");
16
17
  const sdk_1 = require("@zenstackhq/sdk");
17
18
  const langium_1 = require("langium");
18
19
  const lower_case_first_1 = require("lower-case-first");
19
20
  const path_1 = __importDefault(require("path"));
20
21
  const ts_morph_1 = require("ts-morph");
21
22
  const _1 = require(".");
22
- const utils_1 = require("../../language-server/utils");
23
23
  const ast_utils_1 = require("../../utils/ast-utils");
24
+ const typescript_expression_transformer_1 = require("../../utils/typescript-expression-transformer");
24
25
  const plugin_utils_1 = require("../plugin-utils");
25
26
  const expression_writer_1 = require("./expression-writer");
26
- const typescript_expression_transformer_1 = __importDefault(require("./typescript-expression-transformer"));
27
- const utils_2 = require("./utils");
28
- const zod_schema_generator_1 = require("./zod-schema-generator");
29
27
  /**
30
28
  * Generates source file that contains Prisma query guard objects used for injecting database queries
31
29
  */
@@ -41,14 +39,21 @@ class PolicyGenerator {
41
39
  const sf = project.createSourceFile(path_1.default.join(output, 'policy.ts'), undefined, { overwrite: true });
42
40
  sf.addStatements('/* eslint-disable */');
43
41
  sf.addImportDeclaration({
44
- namedImports: [{ name: 'type QueryContext' }, { name: 'hasAllFields' }],
42
+ namedImports: [
43
+ { name: 'type QueryContext' },
44
+ { name: 'type DbOperations' },
45
+ { name: 'hasAllFields' },
46
+ { name: 'allFieldsEqual' },
47
+ { name: 'type PolicyDef' },
48
+ ],
45
49
  moduleSpecifier: `${sdk_1.RUNTIME_PACKAGE}`,
46
50
  });
47
51
  // import enums
52
+ const prismaImport = (0, sdk_1.getPrismaClientImportSpec)(model, output);
48
53
  for (const e of model.declarations.filter((d) => (0, ast_1.isEnum)(d))) {
49
54
  sf.addImportDeclaration({
50
55
  namedImports: [{ name: e.name }],
51
- moduleSpecifier: '@prisma/client',
56
+ moduleSpecifier: prismaImport,
52
57
  });
53
58
  }
54
59
  const models = (0, sdk_1.getDataModels)(model);
@@ -56,13 +61,12 @@ class PolicyGenerator {
56
61
  for (const model of models) {
57
62
  policyMap[model.name] = yield this.generateQueryGuardForModel(model, sf);
58
63
  }
59
- const zodGenerator = new zod_schema_generator_1.ZodSchemaGenerator();
60
- let fieldSchemaGenerated = false;
61
64
  sf.addVariableStatement({
62
65
  declarationKind: ts_morph_1.VariableDeclarationKind.Const,
63
66
  declarations: [
64
67
  {
65
68
  name: 'policy',
69
+ type: 'PolicyDef',
66
70
  initializer: (writer) => {
67
71
  writer.block(() => {
68
72
  writer.write('guard:');
@@ -83,21 +87,21 @@ class PolicyGenerator {
83
87
  }
84
88
  });
85
89
  writer.writeLine(',');
86
- writer.write('schema:');
87
- if (zodGenerator.generate(writer, models)) {
88
- fieldSchemaGenerated = true;
89
- }
90
+ writer.write('validation:');
91
+ writer.inlineBlock(() => {
92
+ for (const model of models) {
93
+ writer.write(`${(0, lower_case_first_1.lowerCaseFirst)(model.name)}:`);
94
+ writer.inlineBlock(() => {
95
+ writer.write(`hasValidation: ${(0, sdk_1.hasValidationAttributes)(model)}`);
96
+ });
97
+ writer.writeLine(',');
98
+ }
99
+ });
90
100
  });
91
101
  },
92
102
  },
93
103
  ],
94
104
  });
95
- if (fieldSchemaGenerated) {
96
- sf.addImportDeclaration({
97
- namedImports: [{ name: 'z' }],
98
- moduleSpecifier: 'zod',
99
- });
100
- }
101
105
  sf.addStatements('export default policy');
102
106
  const shouldCompile = options.compile !== false;
103
107
  if (!shouldCompile || options.preserveTsFiles === true) {
@@ -109,8 +113,10 @@ class PolicyGenerator {
109
113
  }
110
114
  });
111
115
  }
112
- getPolicyExpressions(model, kind, operation) {
113
- const attrs = model.attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === `@@${kind}`; });
116
+ getPolicyExpressions(target, kind, operation) {
117
+ const attributes = target.attributes;
118
+ const attrName = (0, ast_1.isDataModel)(target) ? `@@${kind}` : `@${kind}`;
119
+ const attrs = attributes.filter((attr) => { var _a; return ((_a = attr.decl.ref) === null || _a === void 0 ? void 0 : _a.name) === attrName; });
114
120
  const checkOperation = operation === 'postUpdate' ? 'update' : operation;
115
121
  let result = attrs
116
122
  .filter((attr) => {
@@ -161,8 +167,8 @@ class PolicyGenerator {
161
167
  }
162
168
  hasFutureReference(expr) {
163
169
  var _a;
164
- for (const node of (0, langium_1.streamAllContents)(expr)) {
165
- if ((0, ast_1.isInvocationExpr)(node) && ((_a = node.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'future' && (0, utils_1.isFromStdlib)(node.function.ref)) {
170
+ for (const node of this.allNodes(expr)) {
171
+ if ((0, ast_1.isInvocationExpr)(node) && ((_a = node.function.ref) === null || _a === void 0 ? void 0 : _a.name) === 'future' && (0, sdk_1.isFromStdlib)(node.function.ref)) {
166
172
  return true;
167
173
  }
168
174
  }
@@ -176,6 +182,9 @@ class PolicyGenerator {
176
182
  for (const kind of plugin_utils_1.ALL_OPERATION_KINDS) {
177
183
  if (policies[kind] === true || policies[kind] === false) {
178
184
  result[kind] = policies[kind];
185
+ if (kind === 'create') {
186
+ result[kind + '_input'] = policies[kind];
187
+ }
179
188
  continue;
180
189
  }
181
190
  const denies = this.getPolicyExpressions(model, 'deny', kind);
@@ -197,23 +206,157 @@ class PolicyGenerator {
197
206
  result[kind] = true;
198
207
  continue;
199
208
  }
200
- const func = this.generateQueryGuardFunction(sourceFile, model, kind, allows, denies);
209
+ const guardFunc = this.generateQueryGuardFunction(sourceFile, model, kind, allows, denies);
201
210
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
202
- result[kind] = func.getName();
211
+ result[kind] = guardFunc.getName();
203
212
  if (kind === 'postUpdate') {
204
- const preValueSelect = this.generatePreValueSelect(model, allows, denies);
213
+ const preValueSelect = this.generateSelectForRules(allows, denies);
205
214
  if (preValueSelect) {
206
- result['preValueSelect'] = preValueSelect;
215
+ result[runtime_1.PRE_UPDATE_VALUE_SELECTOR] = preValueSelect;
207
216
  }
208
217
  }
218
+ if (kind === 'create' && this.canCheckCreateBasedOnInput(model, allows, denies)) {
219
+ const inputCheckFunc = this.generateInputCheckFunction(sourceFile, model, kind, allows, denies);
220
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
221
+ result[kind + '_input'] = inputCheckFunc.getName();
222
+ }
209
223
  }
224
+ // generate field read checkers
225
+ this.generateReadFieldsGuards(model, sourceFile, result);
226
+ // generate field update guards
227
+ this.generateUpdateFieldsGuards(model, sourceFile, result);
210
228
  return result;
211
229
  });
212
230
  }
213
- // generates an object that can be used as the 'select' argument when fetching pre-update
214
- // entity value
215
- generatePreValueSelect(model, allows, denies) {
216
- var _a;
231
+ generateReadFieldsGuards(model, sourceFile, result) {
232
+ const allFieldsAllows = [];
233
+ const allFieldsDenies = [];
234
+ for (const field of model.fields) {
235
+ const allows = this.getPolicyExpressions(field, 'allow', 'read');
236
+ const denies = this.getPolicyExpressions(field, 'deny', 'read');
237
+ if (denies.length === 0 && allows.length === 0) {
238
+ continue;
239
+ }
240
+ allFieldsAllows.push(...allows);
241
+ allFieldsDenies.push(...denies);
242
+ const guardFunc = this.generateReadFieldGuardFunction(sourceFile, field, allows, denies);
243
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
244
+ result[`${runtime_1.FIELD_LEVEL_READ_CHECKER_PREFIX}${field.name}`] = guardFunc.getName();
245
+ }
246
+ if (allFieldsAllows.length > 0 || allFieldsDenies.length > 0) {
247
+ result[runtime_1.HAS_FIELD_LEVEL_POLICY_FLAG] = true;
248
+ const readFieldCheckSelect = this.generateSelectForRules(allFieldsAllows, allFieldsDenies);
249
+ if (readFieldCheckSelect) {
250
+ result[runtime_1.FIELD_LEVEL_READ_CHECKER_SELECTOR] = readFieldCheckSelect;
251
+ }
252
+ }
253
+ }
254
+ generateReadFieldGuardFunction(sourceFile, field, allows, denies) {
255
+ const statements = [];
256
+ this.generateNormalizedAuthRef(field.$container, allows, denies, statements);
257
+ // compile rules down to typescript expressions
258
+ statements.push((writer) => {
259
+ const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
260
+ context: sdk_1.ExpressionContext.AccessPolicy,
261
+ fieldReferenceContext: 'input',
262
+ });
263
+ const denyStmt = denies.length > 0
264
+ ? '!(' +
265
+ denies
266
+ .map((deny) => {
267
+ return transformer.transform(deny);
268
+ })
269
+ .join(' || ') +
270
+ ')'
271
+ : undefined;
272
+ const allowStmt = allows.length > 0
273
+ ? '(' +
274
+ allows
275
+ .map((allow) => {
276
+ return transformer.transform(allow);
277
+ })
278
+ .join(' || ') +
279
+ ')'
280
+ : undefined;
281
+ let expr;
282
+ if (denyStmt && allowStmt) {
283
+ expr = `${denyStmt} && ${allowStmt}`;
284
+ }
285
+ else if (denyStmt) {
286
+ expr = denyStmt;
287
+ }
288
+ else if (allowStmt) {
289
+ expr = allowStmt;
290
+ }
291
+ else {
292
+ throw new Error('should not happen');
293
+ }
294
+ writer.write('return ' + expr);
295
+ });
296
+ const func = sourceFile.addFunction({
297
+ name: `${field.$container.name}$${field.name}_read`,
298
+ returnType: 'boolean',
299
+ parameters: [
300
+ {
301
+ name: 'input',
302
+ type: 'any',
303
+ },
304
+ {
305
+ name: 'context',
306
+ type: 'QueryContext',
307
+ },
308
+ ],
309
+ statements,
310
+ });
311
+ return func;
312
+ }
313
+ generateUpdateFieldsGuards(model, sourceFile, result) {
314
+ for (const field of model.fields) {
315
+ const allows = this.getPolicyExpressions(field, 'allow', 'update');
316
+ const denies = this.getPolicyExpressions(field, 'deny', 'update');
317
+ if (denies.length === 0 && allows.length === 0) {
318
+ continue;
319
+ }
320
+ const guardFunc = this.generateQueryGuardFunction(sourceFile, model, 'update', allows, denies, field);
321
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
322
+ result[`${runtime_1.FIELD_LEVEL_UPDATE_GUARD_PREFIX}${field.name}`] = guardFunc.getName();
323
+ }
324
+ }
325
+ canCheckCreateBasedOnInput(model, allows, denies) {
326
+ return [...allows, ...denies].every((rule) => {
327
+ return [...this.allNodes(rule)].every((expr) => {
328
+ var _a;
329
+ if ((0, ast_1.isThisExpr)(expr)) {
330
+ return false;
331
+ }
332
+ if ((0, ast_1.isReferenceExpr)(expr)) {
333
+ if ((0, ast_1.isDataModel)((_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl)) {
334
+ // if policy rules uses relation fields,
335
+ // we can't check based on create input
336
+ return false;
337
+ }
338
+ if ((0, ast_1.isDataModelField)(expr.target.ref) &&
339
+ expr.target.ref.$container === model &&
340
+ (0, sdk_1.hasAttribute)(expr.target.ref, '@default')) {
341
+ // reference to field of current model
342
+ // if it has default value, we can't check
343
+ // based on create input
344
+ return false;
345
+ }
346
+ if ((0, ast_1.isDataModelField)(expr.target.ref) && (0, sdk_1.isForeignKeyField)(expr.target.ref)) {
347
+ // reference to foreign key field
348
+ // we can't check based on create input
349
+ return false;
350
+ }
351
+ }
352
+ return true;
353
+ });
354
+ });
355
+ }
356
+ // generates a "select" object that contains (recursively) fields referenced by the
357
+ // given policy rules
358
+ generateSelectForRules(allows, denies) {
359
+ var _a, _b;
217
360
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
218
361
  const result = {};
219
362
  const addPath = (path) => {
@@ -239,7 +382,7 @@ class PolicyGenerator {
239
382
  }
240
383
  }
241
384
  else if ((0, ast_1.isMemberAccessExpr)(node)) {
242
- if ((0, utils_2.isFutureExpr)(node.operand)) {
385
+ if ((0, sdk_1.isFutureExpr)(node.operand)) {
243
386
  // future().field is not subject to pre-update select
244
387
  return undefined;
245
388
  }
@@ -252,7 +395,14 @@ class PolicyGenerator {
252
395
  return undefined;
253
396
  };
254
397
  for (const rule of [...allows, ...denies]) {
255
- for (const expr of (0, langium_1.streamAllContents)(rule).filter((node) => (0, ast_1.isExpression)(node))) {
398
+ for (const expr of [...this.allNodes(rule)].filter((node) => (0, ast_1.isExpression)(node))) {
399
+ if ((0, ast_1.isThisExpr)(expr) && !(0, ast_1.isMemberAccessExpr)(expr.$container)) {
400
+ // a standalone `this` expression, include all id fields
401
+ const model = (_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl;
402
+ const idFields = (0, ast_utils_1.getIdFields)(model);
403
+ idFields.forEach((field) => addPath([field.name]));
404
+ continue;
405
+ }
256
406
  // only care about member access and reference expressions
257
407
  if (!(0, ast_1.isMemberAccessExpr)(expr) && !(0, ast_1.isReferenceExpr)(expr)) {
258
408
  continue;
@@ -263,7 +413,7 @@ class PolicyGenerator {
263
413
  }
264
414
  const path = visit(expr);
265
415
  if (path) {
266
- if ((0, ast_1.isDataModel)((_a = expr.$resolvedType) === null || _a === void 0 ? void 0 : _a.decl)) {
416
+ if ((0, ast_1.isDataModel)((_b = expr.$resolvedType) === null || _b === void 0 ? void 0 : _b.decl)) {
267
417
  // member selection ended at a data model field, include its 'id'
268
418
  path.push('id');
269
419
  }
@@ -271,60 +421,47 @@ class PolicyGenerator {
271
421
  }
272
422
  }
273
423
  }
274
- return Object.keys(result).length === 0 ? null : result;
424
+ return Object.keys(result).length === 0 ? undefined : result;
275
425
  }
276
- generateQueryGuardFunction(sourceFile, model, kind, allows, denies) {
277
- const func = sourceFile
278
- .addFunction({
279
- name: model.name + '_' + kind,
280
- returnType: 'any',
281
- parameters: [
282
- {
283
- name: 'context',
284
- type: 'QueryContext',
285
- },
286
- ],
287
- })
288
- .addBody();
289
- // check if any allow or deny rule contains 'auth()' invocation
290
- const hasAuthRef = [...denies, ...allows].some((rule) => (0, langium_1.streamAllContents)(rule).some((child) => (0, ast_utils_1.isAuthInvocation)(child)));
291
- if (hasAuthRef) {
292
- const userModel = model.$container.declarations.find((decl) => (0, ast_1.isDataModel)(decl) && decl.name === 'User');
293
- if (!userModel) {
294
- throw new sdk_1.PluginError(_1.name, 'User model not found');
295
- }
296
- const userIdFields = (0, ast_utils_1.getIdFields)(userModel);
297
- if (!userIdFields || userIdFields.length === 0) {
298
- throw new sdk_1.PluginError(_1.name, 'User model does not have an id field');
299
- }
300
- // normalize user to null to avoid accidentally use undefined in filter
301
- func.addStatements(`const user = hasAllFields(context.user, [${userIdFields
302
- .map((f) => "'" + f.name + "'")
303
- .join(', ')}]) ? context.user as any : null;`);
304
- }
305
- const hasFieldAccess = [...denies, ...allows].some((rule) => (0, langium_1.streamAllContents)(rule).some((child) =>
426
+ generateQueryGuardFunction(sourceFile, model, kind, allows, denies, forField) {
427
+ const statements = [];
428
+ this.generateNormalizedAuthRef(model, allows, denies, statements);
429
+ const hasFieldAccess = [...denies, ...allows].some((rule) => [...this.allNodes(rule)].some((child) =>
306
430
  // this.???
307
431
  (0, ast_1.isThisExpr)(child) ||
308
432
  // future().???
309
- (0, utils_2.isFutureExpr)(child) ||
433
+ (0, sdk_1.isFutureExpr)(child) ||
310
434
  // field reference
311
435
  ((0, ast_1.isReferenceExpr)(child) && (0, ast_1.isDataModelField)(child.target.ref))));
312
436
  if (!hasFieldAccess) {
313
437
  // none of the rules reference model fields, we can compile down to a plain boolean
314
438
  // function in this case (so we can skip doing SQL queries when validating)
315
- func.addStatements((writer) => {
316
- const transformer = new typescript_expression_transformer_1.default(kind === 'postUpdate');
317
- denies.forEach((rule) => {
318
- writer.write(`if (${transformer.transform(rule, false)}) { return false; }`);
319
- });
320
- allows.forEach((rule) => {
321
- writer.write(`if (${transformer.transform(rule, false)}) { return true; }`);
439
+ statements.push((writer) => {
440
+ const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
441
+ context: sdk_1.ExpressionContext.AccessPolicy,
442
+ isPostGuard: kind === 'postUpdate',
322
443
  });
323
- writer.write('return false;');
444
+ try {
445
+ denies.forEach((rule) => {
446
+ writer.write(`if (${transformer.transform(rule, false)}) { return ${expression_writer_1.FALSE}; }`);
447
+ });
448
+ allows.forEach((rule) => {
449
+ writer.write(`if (${transformer.transform(rule, false)}) { return ${expression_writer_1.TRUE}; }`);
450
+ });
451
+ }
452
+ catch (err) {
453
+ if (err instanceof typescript_expression_transformer_1.TypeScriptExpressionTransformerError) {
454
+ throw new sdk_1.PluginError(_1.name, err.message);
455
+ }
456
+ else {
457
+ throw err;
458
+ }
459
+ }
460
+ writer.write(`return ${expression_writer_1.FALSE};`);
324
461
  });
325
462
  }
326
463
  else {
327
- func.addStatements((writer) => {
464
+ statements.push((writer) => {
328
465
  writer.write('return ');
329
466
  const exprWriter = new expression_writer_1.ExpressionWriter(writer, kind === 'postUpdate');
330
467
  const writeDenies = () => {
@@ -361,13 +498,97 @@ class PolicyGenerator {
361
498
  }
362
499
  else {
363
500
  // disallow any operation
364
- writer.write(`{ ${sdk_1.GUARD_FIELD_NAME}: false }`);
501
+ writer.write(`{ OR: [] }`);
365
502
  }
366
503
  writer.write(';');
367
504
  });
368
505
  }
506
+ const func = sourceFile.addFunction({
507
+ name: `${model.name}${forField ? '$' + forField.name : ''}_${kind}`,
508
+ returnType: 'any',
509
+ parameters: [
510
+ {
511
+ name: 'context',
512
+ type: 'QueryContext',
513
+ },
514
+ {
515
+ // for generating field references used by field comparison in the same model
516
+ name: 'db',
517
+ type: 'Record<string, DbOperations>',
518
+ },
519
+ ],
520
+ statements,
521
+ });
369
522
  return func;
370
523
  }
524
+ generateInputCheckFunction(sourceFile, model, kind, allows, denies) {
525
+ const statements = [];
526
+ this.generateNormalizedAuthRef(model, allows, denies, statements);
527
+ statements.push((writer) => {
528
+ if (allows.length === 0) {
529
+ writer.write('return false;');
530
+ return;
531
+ }
532
+ const transformer = new typescript_expression_transformer_1.TypeScriptExpressionTransformer({
533
+ context: sdk_1.ExpressionContext.AccessPolicy,
534
+ fieldReferenceContext: 'input',
535
+ });
536
+ let expr = denies.length > 0
537
+ ? '!(' +
538
+ denies
539
+ .map((deny) => {
540
+ return transformer.transform(deny);
541
+ })
542
+ .join(' || ') +
543
+ ')'
544
+ : undefined;
545
+ const allowStmt = allows
546
+ .map((allow) => {
547
+ return transformer.transform(allow);
548
+ })
549
+ .join(' || ');
550
+ expr = expr ? `${expr} && (${allowStmt})` : allowStmt;
551
+ writer.write('return ' + expr);
552
+ });
553
+ const func = sourceFile.addFunction({
554
+ name: model.name + '_' + kind + '_input',
555
+ returnType: 'boolean',
556
+ parameters: [
557
+ {
558
+ name: 'input',
559
+ type: 'any',
560
+ },
561
+ {
562
+ name: 'context',
563
+ type: 'QueryContext',
564
+ },
565
+ ],
566
+ statements,
567
+ });
568
+ return func;
569
+ }
570
+ generateNormalizedAuthRef(model, allows, denies, statements) {
571
+ // check if any allow or deny rule contains 'auth()' invocation
572
+ const hasAuthRef = [...allows, ...denies].some((rule) => [...this.allNodes(rule)].some((child) => (0, ast_utils_1.isAuthInvocation)(child)));
573
+ if (hasAuthRef) {
574
+ const userModel = model.$container.declarations.find((decl) => (0, ast_1.isDataModel)(decl) && decl.name === 'User');
575
+ if (!userModel) {
576
+ throw new sdk_1.PluginError(_1.name, 'User model not found');
577
+ }
578
+ const userIdFields = (0, ast_utils_1.getIdFields)(userModel);
579
+ if (!userIdFields || userIdFields.length === 0) {
580
+ throw new sdk_1.PluginError(_1.name, 'User model does not have an id field');
581
+ }
582
+ // normalize user to null to avoid accidentally use undefined in filter
583
+ statements.push(`const user = hasAllFields(context.user, [${userIdFields
584
+ .map((f) => "'" + f.name + "'")
585
+ .join(', ')}]) ? context.user as any : null;`);
586
+ }
587
+ }
588
+ *allNodes(expr) {
589
+ yield expr;
590
+ yield* (0, langium_1.streamAllContents)(expr);
591
+ }
371
592
  }
372
593
  exports.default = PolicyGenerator;
373
594
  //# sourceMappingURL=policy-guard-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"policy-guard-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/policy-guard-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"policy-guard-generator.js","sourceRoot":"","sources":["../../../src/plugins/access-policy/policy-guard-generator.ts"],"names":[],"mappings":"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"}