zenstackhq / zenstack

Fullstack TypeScript toolkit that enhances Prisma ORM with flexible Authorization layer for RBAC/ABAC/PBAC/ReBAC, offering auto-generated type-safe APIs and frontend hooks.
https://zenstack.dev
MIT License
2.05k stars 87 forks source link

Cross-model field comparison causes incorrect query result #1506

Closed ymc9 closed 3 months ago

ymc9 commented 3 months ago
model A {
    id Int @id @default(autoincrement())
    value Int
    b B @relation(fields: [bId], references: [id])
    bId Int @unique

    @@allow('read', true)
}

model B {
    id Int @id @default(autoincrement())
    value Int
    a A?
    c C @relation(fields: [cId], references: [id])
    cId Int @unique

    @@allow('read', value > c.value)
}

model C {
    id Int @id @default(autoincrement())
    value Int
    b B?

    @@allow('read', true)}
await prisma.a.create({
    data: {
        value: 3,
        b: {
            create: {
                value: 2,
                c: {
                    create: {
                        value: 1,
                    },
                },
            },
        },
    },
});

const db = enhance();
const read = await db.a.findMany({ include: { b: true } });
expect(read).toHaveLength(1);
expect(read[0].b).toBeTruthy();
ymc9 commented 3 months ago

Fixed in v2.2.2