Skip to content

Commit fea8ec7

Browse files
authored
merge dev to main (v2.1.1) (#1453)
2 parents 3588a36 + 29962e0 commit fea8ec7

File tree

18 files changed

+89
-22
lines changed

18 files changed

+89
-22
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": "2.1.0",
3+
"version": "2.1.1",
44
"description": "",
55
"scripts": {
66
"build": "pnpm -r build",

packages/ide/jetbrains/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
## [Unreleased]
44
### Added
5+
- Support using ZModel type names (e.g., `DateTime`) as model field names.
6+
- `auth()` is resolved from all reachable schema files.
7+
8+
## 2.0.0
9+
### Added
510
- ZenStack V2 release!
611

712
## 1.11.0

packages/ide/jetbrains/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group = "dev.zenstack"
12-
version = "2.1.0"
12+
version = "2.1.1"
1313

1414
repositories {
1515
mavenCentral()

packages/ide/jetbrains/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "jetbrains",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"displayName": "ZenStack JetBrains IDE Plugin",
55
"description": "ZenStack JetBrains IDE plugin",
66
"homepage": "https://zenstack.dev",

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": "2.1.0",
3+
"version": "2.1.1",
44
"displayName": "ZenStack modeling language compiler",
55
"description": "ZenStack modeling language compiler",
66
"homepage": "https://zenstack.dev",

packages/misc/redwood/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@zenstackhq/redwood",
33
"displayName": "ZenStack RedwoodJS Integration",
4-
"version": "2.1.0",
4+
"version": "2.1.1",
55
"description": "CLI and runtime for integrating ZenStack with RedwoodJS projects.",
66
"repository": {
77
"type": "git",

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": "2.1.0",
4+
"version": "2.1.1",
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": "2.1.0",
4+
"version": "2.1.1",
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": "2.1.0",
4+
"version": "2.1.1",
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": "2.1.0",
4+
"version": "2.1.1",
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": "2.1.0",
4+
"version": "2.1.1",
55
"description": "Runtime of ZenStack for both client-side and server-side environments.",
66
"repository": {
77
"type": "git",

packages/runtime/res/enhance.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { enhance } from '.zenstack/enhance';
1+
export { auth, enhance } from '.zenstack/enhance';

packages/runtime/src/enhancements/policy/policy-utils.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -960,13 +960,9 @@ export class PolicyUtil extends QueryUtils {
960960
* @returns
961961
*/
962962
injectReadCheckSelect(model: string, args: any) {
963-
if (this.hasFieldLevelPolicy(model)) {
964-
// recursively inject selection for fields needed for field-level read checks
965-
const readFieldSelect = this.getReadFieldSelect(model);
966-
if (readFieldSelect) {
967-
this.doInjectReadCheckSelect(model, args, { select: readFieldSelect });
968-
}
969-
}
963+
// we need to recurse into relation fields before injecting the current level, because
964+
// injection into current level can result in relation being selected/included, which
965+
// can then cause infinite recursion when we visit relation later
970966

971967
// recurse into relation fields
972968
for (const [k, v] of Object.entries<any>(args.select ?? args.include ?? {})) {
@@ -975,6 +971,14 @@ export class PolicyUtil extends QueryUtils {
975971
this.injectReadCheckSelect(field.type, v);
976972
}
977973
}
974+
975+
if (this.hasFieldLevelPolicy(model)) {
976+
// recursively inject selection for fields needed for field-level read checks
977+
const readFieldSelect = this.getReadFieldSelect(model);
978+
if (readFieldSelect) {
979+
this.doInjectReadCheckSelect(model, args, { select: readFieldSelect });
980+
}
981+
}
978982
}
979983

980984
private doInjectReadCheckSelect(model: string, args: any, input: any) {

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": "Build scalable web apps with minimum code by defining authorization and validation rules inside the data schema that closer to the database",
6-
"version": "2.1.0",
6+
"version": "2.1.1",
77
"author": {
88
"name": "ZenStack Team"
99
},

packages/sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/sdk",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"description": "ZenStack plugin development SDK",
55
"main": "index.js",
66
"scripts": {

packages/server/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/server",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"displayName": "ZenStack Server-side Adapters",
55
"description": "ZenStack server-side adapters",
66
"homepage": "https://zenstack.dev",

packages/testtools/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@zenstackhq/testtools",
3-
"version": "2.1.0",
3+
"version": "2.1.1",
44
"description": "ZenStack Test Tools",
55
"main": "index.js",
66
"private": true,
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import { loadSchema } from '@zenstackhq/testtools';
2+
3+
describe('issue 1452', () => {
4+
it('regression', async () => {
5+
const { prisma, enhance } = await loadSchema(
6+
`
7+
model User {
8+
id String @id
9+
memberships Membership[]
10+
}
11+
12+
model Space {
13+
id String @id
14+
memberships Membership[]
15+
}
16+
17+
model Membership {
18+
userId String
19+
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
20+
spaceId String
21+
space Space @relation(fields: [spaceId], references: [id], onDelete: Cascade)
22+
23+
role String @deny("update", auth() == user)
24+
employeeReference String? @deny("read, update", space.memberships?[auth() == user && !(role in ['owner', 'admin'])])
25+
26+
createdAt DateTime @default(now())
27+
updatedAt DateTime @updatedAt
28+
29+
@@id([userId, spaceId])
30+
@@allow('all', true)
31+
}
32+
`,
33+
{ logPrismaQuery: true }
34+
);
35+
36+
await prisma.user.create({
37+
data: { id: '1' },
38+
});
39+
40+
await prisma.space.create({
41+
data: { id: '1' },
42+
});
43+
44+
await prisma.membership.create({
45+
data: {
46+
user: { connect: { id: '1' } },
47+
space: { connect: { id: '1' } },
48+
role: 'foo',
49+
employeeReference: 'xyz',
50+
},
51+
});
52+
53+
const db = enhance({ id: '1' });
54+
const r = await db.membership.findMany();
55+
expect(r).toHaveLength(1);
56+
expect(r[0].employeeReference).toBeUndefined();
57+
});
58+
});

0 commit comments

Comments
 (0)