ZenStack - это инструментарий node.js/typescript, который упрощает разработку бэкэнда веб -приложения. Он улучшает Prisma Orm с гибким уровнем авторизации и автоматическим, безопасным для типа API/крючков, открывая полный потенциал для развития полного стека.
Наша цель состоит в том, чтобы позволить вам сэкономить время на написании кода шаблона и сосредоточиться на создании реальных функций!
Читать полную документацию в? 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 с поддержкой доступа в Backend CRUD API, которые можно безопасно вызвать с фронта. Вот пример для следующего.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 ) } ) ,
} ) ;Плагины могут генерировать клиентские библиотеки, которые разговаривают с вышеупомянутыми API. Вот пример для 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 Multianant для выполнения примера. Вы можете найти различные реализации ниже:
Присоединяйтесь к нашему серверу Discord для чата и обновлений!
Если вам нравится ZenStack, присоединяйтесь к нам, чтобы сделать его лучшим инструментом! Пожалуйста, воспользуйтесь руководством для получения подробной информации о том, как начать, и не стесняйтесь присоединиться к Discord, чтобы поделиться своими мыслями. Документации находятся в отдельном репо: Zenstack-Docs.
Пожалуйста, также рассмотрите возможность спонсировать нашу работу, чтобы ускорить разработку. Ваш вклад будет использоваться на 100% в качестве вознаграждения за щедеры, чтобы побудить членов сообщества помочь исправить ошибки, добавить функции и улучшить документацию.
Спасибо за щедрую поддержку!
Марблизм | Русалочная диаграмма | Coderabbit | Иоганн Рон |
Бенджамин Зецирович | Ульворированный | Фабиан Джокс |
Спасибо всем участникам, которые помогли сделать Zenstack лучше!
Грань