Zenstack ist ein Node.js/TypeScript -Toolkit, das die Entwicklung des Backends einer Web -App vereinfacht. Es verbessert die Prisma-ORM mit einer flexiblen Autorisierungsschicht und automatisch generierten, Typ-sicheren APIs/Haken und schießt ihr volles Potenzial für die Entwicklung vollständiger Stapel aus.
Unser Ziel ist es, dass Sie Zeit sparen können, wenn Sie den Code des Boilerplate -Boilers schreiben und sich darauf konzentrieren, echte Funktionen zu erstellen!
Vollständige Dokumentation lesen? Zenstack.dev. Schließen Sie sich Discord für Feedback und Fragen an.
Zenstack erweitert die Kraft von Prisma schrittweise mit den folgenden vier Ebenen:
Zenstack führt eine Datenmodellierungssprache namens "Zmodel" ein - eine Superset of Prisma -Schema -Sprache. Es erweiterte das Prisma -Schema mit benutzerdefinierten Attributen und Funktionen und implementierte basierend darauf eine flexible Zugriffskontrollschicht um Prisma.
// base.zmodel
abstract model Base {
id String @ id
author User @ relation ( fields : [ authorId ] , references : [ id ] )
authorId String
// ? allow full CRUD by author
@@ allow ( 'all' , author == auth ( ) )
} // schema.zmodel
import "base"
model Post extends Base {
title String
published Boolean @ default ( false )
// ? allow logged-in users to read published posts
@@ allow ( 'read' , auth ( ) != null && published )
} Die zenstack CLI verwandelt das Zmodel in ein Standard -Prisma -Schema, das Sie mit den regulären Prisma -Workflows verwenden können.
Zur Laufzeit werden transparente Proxys für Prisma -Kunden erstellt, um Abfragen und Mutationen abzufangen, um den Zugriffsrichtlinien durchzusetzen.
import { enhance } from '@zenstackhq/runtime' ;
// a regular Prisma client
const prisma = new PrismaClient ( ) ;
async function getPosts ( userId : string ) {
// create an enhanced Prisma client that has access control enabled
const enhanced = enhance ( prisma , { user : userId } ) ;
// only posts that're visible to the user will be returned
return enhanced . post . findMany ( ) ;
}Serveradapter-Pakete helfen Ihnen dabei, einen Zugriffskontroll-fähigen Prisma-Client in Backend-CRUD-APIs einzuwickeln, das sicher vom Frontend aufgerufen werden kann. Hier ist ein Beispiel für Next.js:
// pages/api/model/[...path].ts
import { requestHandler } from '@zenstackhq/next' ;
import { enhance } from '@zenstackhq/runtime' ;
import { getSessionUser } from '@lib/auth' ;
import { prisma } from '@lib/db' ;
// Mount Prisma-style APIs: "/api/model/post/findMany", "/api/model/post/create", etc.
// Can be configured to provide standard RESTful APIs (using JSON:API) instead.
export default requestHandler ( {
getPrisma : ( req , res ) => enhance ( prisma , { user : getSessionUser ( req , res ) } ) ,
} ) ;Plugins können starke Client-Bibliotheken erzeugen, die mit den oben genannten APIs sprechen. Hier ist ein Beispiel für React:
// components/MyPosts.tsx
import { useFindManyPost } from '@lib/hooks' ;
const MyPosts = ( ) => {
// list all posts that're visible to the current user, together with their authors
const { data : posts } = useFindManyPost ( {
include : { author : true } ,
orderBy : { createdAt : 'desc' } ,
} ) ;
return (
< ul >
{ posts ?. map ( ( post ) => (
< li key = { post . id } >
{ post . title } by { post . author . name }
</ li >
) ) }
</ ul >
) ;
} ; Das folgende Diagramm gibt einen hochrangigen Architekturüberblick über Zenstack.
Das Beispiel -Repo enthält die folgenden Muster:
Sie können diesen Blog -Beitrag als Einführung verwenden.
Schauen Sie sich die Multi-Tenant-TODO-App für ein laufendes Beispiel an. Nachfolgend finden Sie verschiedene Implementierungen:
Treten Sie unserem Discord -Server für Chat und Updates bei!
Wenn Sie Zenstack mögen, machen Sie mit uns ein besseres Werkzeug! Bitte verwenden Sie den leitenden Leitfaden für Einzelheiten zum Einstieg, und zögern Sie nicht, Discord beizutreten, um Ihre Gedanken zu teilen. Dokumentationen befinden sich in einem separaten Repo: Zenstack-Docs.
Bitte erwägen Sie auch, unsere Arbeit zu sponsern, um die Entwicklung zu beschleunigen. Ihr Beitrag wird zu 100% als Kopf
Vielen Dank für Ihre großzügige Unterstützung!
Marblismus | Meerjungfrau -Diagramm | Codierabbit | Johann Rohn |
Benjamin Zecirovic | Ulric | Fabian Jocks |
Vielen Dank an alle Mitwirkenden, die dazu beigetragen haben, Zenstack besser zu machen!
MIT