ZenStack هي مجموعة أدوات Node.js/TypeScript التي تبسط تطوير الواجهة الخلفية لتطبيق الويب. إنه يعزز PRISMA ORM مع طبقة ترخيص مرنة وواجهة برمجة تطبيقات/خطافات آمنة من النوع ، مما يؤدي إلى إمكانية تطوير إمكاناتها الكاملة لتطوير الكامل.
هدفنا هو السماح لك بتوفير الوقت في كتابة رمز Boilerplate والتركيز على بناء ميزات حقيقية!
قراءة الوثائق الكاملة في؟ Zenstack.Dev. انضم إلى Discord للحصول على ردود الفعل والأسئلة.
يمتد Zenstack بشكل تدريجي قوة Prisma مع الطبقات الأربع التالية:
يقدم Zenstack لغة نمذجة البيانات تسمى "Zmodel" - مجموعة من لغة مخطط Prisma. لقد مدد مخطط Prisma مع سمات ووظائف مخصصة ، وبناءً على ذلك ، نفذت طبقة مرنة التحكم في الوصول حول 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 بنقل Zmodel إلى مخطط Prisma قياسي ، والذي يمكنك استخدامه مع سير عمل Prisma المنتظم.
في وقت التشغيل ، يتم إنشاء وكلاء شفافين حول عملاء Prisma لاعتراض الاستعلامات والطفرات لفرض سياسات الوصول.
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 ( ) ;
}تساعدك حزم محول الخادم على لف عميل PRISMA الذي يدعم الوصول إلى الوصول إلى واجهات برمجة تطبيقات CRUD الخلفية التي يمكن استدعاؤها بأمان من الواجهة الأمامية. إليك مثال لـ 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 ) } ) ,
} ) ;يمكن للمكونات الإضافية إنشاء مكتبات عملاء قوية من نوعها تتحدث إلى واجهات برمجة التطبيقات المذكورة أعلاه. إليك مثال على 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 >
) ;
} ; يعطي الرسم البياني التالي نظرة عامة على الهندسة المعمارية عالية المستوى من Zenstack.
يتضمن عينة إعادة الريبو الأنماط التالية:
يمكنك استخدام منشور المدونة هذا كمقدمة.
تحقق من تطبيق TODO متعدد المستأجرين للحصول على مثال قيد التشغيل. يمكنك العثور على تطبيقات مختلفة أدناه:
انضم إلى خادم Discord الخاص بنا للدردشة والتحديثات!
إذا كنت تحب Zenstack ، انضم إلينا لجعلها أداة أفضل! يرجى استخدام دليل المساهمة للحصول على تفاصيل حول كيفية البدء ، ولا تتردد في الانضمام إلى Discord لمشاركة أفكارك. الوثائق موجودة في ريبو منفصل: Zenstack-Docs.
يرجى أيضًا التفكير في رعاية عملنا لتسريع التطوير. سيتم استخدام مساهمتك بنسبة 100 ٪ كمكافأة مكافأة لتشجيع أفراد المجتمع على المساعدة في إصلاح الأخطاء وإضافة الميزات وتحسين الوثائق.
شكرا لك على دعمكم السخي!
sarblism | الرسم البياني حورية البحر | coderabbit | يوهان رون |
بنيامين زيكروفيتش | أولريك | فابيان جوكس |
شكرا لجميع المساهمين الذين ساعدوا في جعل Zenstack أفضل!
معهد ماساتشوستس للتكنولوجيا