ZenStack adalah toolkit node.js/typeScript yang menyederhanakan pengembangan backend aplikasi web. Ini meningkatkan prisma orm dengan lapisan otorisasi yang fleksibel dan API/kait yang dihasilkan secara otomatis, jenis-aman, membuka potensi penuh untuk pengembangan tumpukan penuh.
Tujuan kami adalah membiarkan Anda menghemat waktu menulis kode boilerplate dan fokus membangun fitur nyata!
Baca dokumentasi lengkap di? zenstack.dev. Bergabunglah dengan perselisihan untuk umpan balik dan pertanyaan.
Zenstack secara bertahap memperluas kekuatan Prisma dengan empat lapisan berikut:
ZenStack memperkenalkan bahasa pemodelan data yang disebut "Zmodel" - superset bahasa skema prisma. Ini memperluas skema prisma dengan atribut dan fungsi khusus dan, berdasarkan itu, menerapkan lapisan kontrol akses yang fleksibel di sekitar 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 )
} zenstack CLI mentransmisikan zmodel menjadi skema prisma standar, yang dapat Anda gunakan dengan alur kerja prisma reguler.
Saat runtime, proksi transparan dibuat di sekitar klien Prisma untuk mencegat pertanyaan dan mutasi untuk menegakkan kebijakan akses.
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 ( ) ;
}Paket adaptor server membantu Anda membungkus klien PRISMA yang mendukung akses-kontrol ke API crud backend yang dapat dipanggil dengan aman dari frontend. Berikut contoh untuk 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 ) } ) ,
} ) ;Plugin dapat menghasilkan perpustakaan klien yang diketik kuat yang berbicara dengan API yang disebutkan di atas. Inilah contoh untuk bereaksi:
// 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 >
) ;
} ; Diagram berikut memberikan gambaran arsitektur tingkat tinggi dari ZenStack.
Repo sampel mencakup pola berikut:
Anda dapat menggunakan posting blog ini sebagai pengantar.
Lihatlah aplikasi Multi-Tenant Todo untuk contoh yang berjalan. Anda dapat menemukan berbagai implementasi di bawah ini:
Bergabunglah dengan server Discord kami untuk obrolan dan pembaruan!
Jika Anda menyukai Zenstack, bergabunglah dengan kami untuk menjadikannya alat yang lebih baik! Silakan gunakan panduan yang berkontribusi untuk detail tentang cara memulai, dan jangan ragu untuk bergabung dengan perselisihan untuk membagikan pemikiran Anda. Dokumentasi berada di repo terpisah: Zenstack-Docs.
Harap pertimbangkan juga mensponsori pekerjaan kami untuk mempercepat pengembangan. Kontribusi Anda akan 100% digunakan sebagai hadiah hadiah untuk mendorong anggota masyarakat membantu memperbaiki bug, menambahkan fitur, dan meningkatkan dokumentasi.
Terima kasih atas dukungan Anda yang murah hati!
Marblisme | Bagan Putri Duyung | Coderabbit | Johann Rohn |
Benjamin Zecirovic | Ulric | Jock Fabian |
Terima kasih kepada semua kontributor yang telah membantu membuat Zenstack lebih baik!
Mit