Skip to content

Commit 0a60ddc

Browse files
authored
merge dev to main (#630)
2 parents 66eecc5 + 4bc72a8 commit 0a60ddc

File tree

18 files changed

+136
-23
lines changed

18 files changed

+136
-23
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "zenstack-monorepo",
3-
"version": "1.0.0-beta.17",
3+
"version": "1.0.0-beta.18",
44
"description": "",
55
"scripts": {
66
"build": "pnpm -r build",

packages/language/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/language",
3-
"version": "1.0.0-beta.17",
3+
"version": "1.0.0-beta.18",
44
"displayName": "ZenStack modeling language compiler",
55
"description": "ZenStack modeling language compiler",
66
"homepage": "https://zenstack.dev",

packages/plugins/openapi/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/openapi",
33
"displayName": "ZenStack Plugin and Runtime for OpenAPI",
4-
"version": "1.0.0-beta.17",
4+
"version": "1.0.0-beta.18",
55
"description": "ZenStack plugin and runtime supporting OpenAPI",
66
"main": "index.js",
77
"repository": {

packages/plugins/swr/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/swr",
33
"displayName": "ZenStack plugin for generating SWR hooks",
4-
"version": "1.0.0-beta.17",
4+
"version": "1.0.0-beta.18",
55
"description": "ZenStack plugin for generating SWR hooks",
66
"main": "index.js",
77
"repository": {

packages/plugins/tanstack-query/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/tanstack-query",
33
"displayName": "ZenStack plugin for generating tanstack-query hooks",
4-
"version": "1.0.0-beta.17",
4+
"version": "1.0.0-beta.18",
55
"description": "ZenStack plugin for generating tanstack-query hooks",
66
"main": "index.js",
77
"exports": {

packages/plugins/trpc/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/trpc",
33
"displayName": "ZenStack plugin for tRPC",
4-
"version": "1.0.0-beta.17",
4+
"version": "1.0.0-beta.18",
55
"description": "ZenStack plugin for tRPC",
66
"main": "index.js",
77
"repository": {

packages/runtime/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/runtime",
33
"displayName": "ZenStack Runtime Library",
4-
"version": "1.0.0-beta.17",
4+
"version": "1.0.0-beta.18",
55
"description": "Runtime of ZenStack for both client-side and server-side environments.",
66
"repository": {
77
"type": "git",

packages/runtime/src/enhancements/policy/index.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@ import path from 'path';
55
import semver from 'semver';
66
import { PRISMA_MINIMUM_VERSION } from '../../constants';
77
import { AuthUser, DbClientContract } from '../../types';
8+
import { hasAllFields } from '../../validation';
89
import { getDefaultModelMeta } from '../model-meta';
910
import { makeProxy } from '../proxy';
1011
import type { ModelMeta, PolicyDef, ZodSchemas } from '../types';
12+
import { getIdFields } from '../utils';
1113
import { PolicyProxyHandler } from './handler';
1214

1315
/**
@@ -70,6 +72,21 @@ export function withPolicy<DbClient extends object>(
7072
const _modelMeta = options?.modelMeta ?? getDefaultModelMeta();
7173
const _zodSchemas = options?.zodSchemas ?? getDefaultZodSchemas();
7274

75+
// validate user context
76+
if (context?.user) {
77+
const idFields = getIdFields(_modelMeta, 'User');
78+
if (
79+
!hasAllFields(
80+
context.user,
81+
idFields.map((f) => f.name)
82+
)
83+
) {
84+
throw new Error(
85+
`Invalid user context: must have valid ID field ${idFields.map((f) => `"${f.name}"`).join(', ')}`
86+
);
87+
}
88+
}
89+
7390
return makeProxy(
7491
prisma,
7592
_modelMeta,

packages/runtime/src/enhancements/utils.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,13 @@ export function getModelFields(data: object) {
1818
* Gets id fields for the given model.
1919
*/
2020
export function getIdFields(modelMeta: ModelMeta, model: string, throwIfNotFound = false) {
21-
const fields = modelMeta.fields[lowerCaseFirst(model)];
21+
let fields = modelMeta.fields[lowerCaseFirst(model)];
2222
if (!fields) {
23-
throw new Error(`Unable to load fields for ${model}`);
23+
if (throwIfNotFound) {
24+
throw new Error(`Unable to load fields for ${model}`);
25+
} else {
26+
fields = {};
27+
}
2428
}
2529
const result = Object.values(fields).filter((f) => f.isId);
2630
if (result.length === 0 && throwIfNotFound) {

packages/schema/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
"publisher": "zenstack",
44
"displayName": "ZenStack Language Tools",
55
"description": "A toolkit for building secure CRUD apps with Next.js + Typescript",
6-
"version": "1.0.0-beta.17",
6+
"version": "1.0.0-beta.18",
77
"author": {
88
"name": "ZenStack Team"
99
},

0 commit comments

Comments
 (0)