Code Monkey home page Code Monkey logo

zenstackhq / zenstack Goto Github PK

View Code? Open in Web Editor NEW
1.6K 14.0 67.0 5.83 MB

Typescript toolkit on top of Prisma ORM, offering flexible and declarative Access Control Policy(Authorization/Permission) for RBAC/ABAC/PBAC/ReBAC with auto-generated type-safe APIs and frontend hooks.

Home Page: https://zenstack.dev

License: MIT License

JavaScript 0.37% TypeScript 99.18% Shell 0.02% Kotlin 0.28% CSS 0.15%
fullstack nextjs orm typescript authorization crud prisma access-control trpc api

zenstack's People

Contributors

abdullahahmeda avatar azzerty23 avatar bbozzay avatar chemitaxis avatar chunkerchunker avatar dikyarga avatar elsantoalcielo avatar erikmcm avatar jasonmacdonald avatar jbruxelle avatar jiashengguo avatar krist7599555 avatar lordfirespeed avatar mateus-p avatar neon0x avatar potion-cellar avatar sakgoyal avatar simonedelmann avatar sitch avatar tgtgamer avatar tlancina avatar ustice avatar ymc9 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

zenstack's Issues

Missing @unique attribute is not properly checked

One-to-one relation requires one side of reference to be marked @unique. It's not checked today.

repro:

model User {
    id String @id @default(cuid())
    data UserData?
}

model UserData {
    id String @id @default(cuid())
    user User  @relation(fields: [userId], references: [id])
    userId String
}

Error:
Error parsing attribute "@relation": A one-to-one relation must use unique fields on the defining side. Either add an @unique attribute to the field userId, or change the relation to one-to-many.

VS Code extension occasionally reports errors

Describe the bug
VS Code extension occasionally reports errors with a stack like:

An error occurred during validation: Error: AST node has no document.
at Mb (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:36:5802)
at get ref [as ref] (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:3736:24701)
at rM (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:6630:26281)
at tc.validate (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:6630:32491)
at ch.checkExpression (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:6630:33668)
at /Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:3736:29142
at /Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:3582:26330
at async Promise.all (index 8)
at async eg.validateAst (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:3582:26175)
at async eg.validateDocument (/Users/yiming/.vscode/extensions/zenstack.zenstack-1.0.4/bundle/language-server/main.js:3582:25876)

To Reproduce
Can't reproduce consistently.

Expected behavior
No error.

Environment (please complete the following information):

  • OS: Mac OS
  • Node version: 16.15
  • NPM version: 8.9.2
  • Database type: Sqlite

Issue warning if no policy is found in a model

If a model doesn't have any policy, by default, no operation is permitted, so no hooks are generated. However, this can be confusing to new users. We should issue a warning during generation.

User without 'name' property will get error when generating

node_modules/.zenstack/src/auth/authorize.ts:32:21 - error TS2322: Type '{ id: true; email: true; password: true; name: true; }' is not assignable to type 'UserSelect'.
Object literal may only specify known properties, and 'name' does not exist in type 'UserSelect'.

32 name: true,

Make sure auth()'s type is properly resolved

Currently, result type of auth() function is weakly resolved because it needs to refer to the User model defined by user. We should actually let it resolve to the user-defined User model.

User model with non-string id doesn't work with auth() policy check

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:
1.
2.
3.

Expected behavior
A clear and concise description of what you expected to happen.

Screenshots
If applicable, add screenshots to help explain your problem.

Environment (please complete the following information):

  • OS: [e.g. Mac OS 13.0]
  • Node version: [e.g. 16.15.0]
  • NPM version: [e.g. 8.19.2]
  • Database type: [e.g. Postgresql]

Additional context
Add any other context about the problem here.

Inaccurate log message for policy rejection

When a read request is reject, log message is incorrect:

GET Post: Request handler error: DENIED_BY_POLICY, the request was denied due to access policy violation: denied by policy before update: entities failed 'read' check, User#[cla8yyvto0001vh8hy4cxeura]

@@unique with multiple fields cause error when findUnique()

Describe the bug

model Model {
        id String @id @default(uuid())
        a String
        b String
        @@unique([a, b])
        @@allow('all', true)
}
await withPresets(prisma).model.findUnique({ where: { a_b: { a: 'a', b: 'b' } } }));

Error

Invalid prisma.model.findMany() invocation:

{
  where: {
    AND: [
      {
        a_b: {
        ~~~
          a: 'a1',
          b: 'b1'
        }
      },
      {
        x: {
          gt: 0
        }
      }
    ]
  }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.