ZenStack est une boîte à outils Node.js / TypeScript qui simplifie le développement du backend d'une application Web. Il améliore PRISMA ORM avec une couche d'autorisation flexible et des API / crochets générés automatiquement et en sécurité, débloquant son plein potentiel pour le développement complet.
Notre objectif est de vous permettre de gagner du temps à écrire du code du chauffeur et de vous concentrer sur la construction de fonctionnalités réelles!
Lire la documentation complète sur? zenstack.dev. Rejoignez Discord pour les commentaires et les questions.
Zenstack étend progressivement le pouvoir de Prisma avec les quatre couches suivantes:
Zenstack présente un langage de modélisation des données appelé "ZModel" - un superset du langage du schéma PRISMA. Il a étendu le schéma PRISMA avec des attributs et des fonctions personnalisés et, sur la base de cela, a implémenté une couche de contrôle d'accès flexible autour de 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 )
} La CLI zenstack transmet le Zmodel en un schéma PRISMA standard, que vous pouvez utiliser avec les flux de travail Prisma ordinaires.
Au moment de l'exécution, des procurations transparentes sont créées autour des clients PRISMA pour intercepter les requêtes et les mutations pour appliquer les politiques d'accès.
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 ( ) ;
}Les packages d'adaptateurs de serveur vous aident à envelopper un client Prisma compatible accès à l'accès dans des API CRUD backend qui peuvent être appelées en toute sécurité depuis le frontend. Voici un exemple pour 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 ) } ) ,
} ) ;Les plugins peuvent générer des bibliothèques clients de type solide qui parlent aux API susmentionnées. Voici un exemple pour 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 >
) ;
} ; Le diagramme suivant donne un aperçu de l'architecture de haut niveau de Zenstack.
L'exemple de dépôt comprend les modèles suivants:
Vous pouvez utiliser cet article de blog comme introduction.
Consultez l'application TODO multi-locataire pour un exemple en cours d'exécution. Vous pouvez trouver différentes implémentations ci-dessous:
Rejoignez notre serveur Discord pour le chat et les mises à jour!
Si vous aimez Zenstack, rejoignez-nous pour en faire un meilleur outil! Veuillez utiliser le guide de contribution pour plus de détails sur la façon de commencer, et n'hésitez pas à rejoindre Discord pour partager vos réflexions. Les documentations résident dans un dépôt séparé: Zenstack-docs.
Veuillez également envisager de parrainer notre travail pour accélérer le développement. Votre contribution sera utilisée à 100% comme récompense de prime pour encourager les membres de la communauté à aider à corriger les bogues, à ajouter des fonctionnalités et à améliorer la documentation.
Merci pour votre généreux soutien!
Marblisme | Graphique de sirène | Coderabbit | Johann Rohn |
Benjamin Zecirovic | Ulrique | Jocks Fabian |
Merci à tous les contributeurs qui ont aidé à améliorer Zenstack!
Mit