• 请不要在回答技术问题时复制粘贴 AI 生成的内容
zhaifanhua
V2EX  ›  程序员

做了好几个后台系统之后,我把这套多租户中后台底座开源了(XiHan.BasicApp 基于.NET 10 + Vue 3)

  •  
  •   zhaifanhua ·
    zhaifanhua · 9h 34m ago · 658 views

    做了好几个后台系统之后,我把这套多租户中后台底座开源了( XiHan.BasicApp 基于.NET 10 + Vue 3 )

    如果你也写过后台管理系统,大概率经历过这几件事:

    • 每开一个新项目,登录、用户、角色、菜单、权限又从零搭一遍,复制粘贴改改改;
    • 权限只做到了"能不能看这个菜单",等真到了"这个人只能看自己部门的数据""手机号要打码",就开始一个补丁接一个补丁;
    • 想做多租户,结果发现登录、数据隔离、套餐、计费这些东西牵一发动全身,最后做成了一个"伪多租户"。

    我也一样。前前后后做了几个中后台,每次都在重复造轮子,每次都不太满意。于是这两年,我把反复踩过的坑,沉淀成了一套自己用着顺手的底座 —— XiHan.BasicApp,现在把它开源了。

    登录

    它是什么

    一句话:一套基于 .NET 10 + Vue 3 的企业级多租户中后台内核

    后端是 DDD 分层 + CQRS ,跑在我自研的底层框架 XiHan.Framework 上;前端是 Vue 3.5 + TypeScript + Naive UI 。

    它不是又一个 xxx-admin 的套壳。多租户、RBAC + ABAC 、字段级安全这些通常被"做个样子"的东西,我是当成核心来做的——而且它现在就在真实环境里跑着,不是一个 demo 。

    几个我自己最满意的设计

    光说功能多没意思,我更想聊聊几个"为什么这么做"的决定。

    1. 登录后再选租户,而不是登录前

    大多数多租户系统让你先选租户、再登录,体验很别扭。我把邮箱作为全平台唯一身份,登录后由系统按你的归属智能落点:平台管理员进控制台、单租户用户直接进工作台、多租户成员进租户选择页,头像下拉里随时切换租户。超级管理员还能以"平台态"切进任意租户代为管理。

    租户选择

    2. 权限一直做到了"字段级"

    • RBAC 解决"能不能进这个页面、点这个按钮";
    • ABAC 解决"能看哪些数据"——全部 / 本部门 / 本部门及子部门 / 仅本人,越权请求在服务端直接拦掉;
    • FLS (字段级安全)解决"敏感字段能不能看、要不要脱敏"——手机号、邮箱该打码的打码,没权限的字段根本不下发,也导不出去。

    三层叠在一起,权限才算做完整。这也是我觉得很多"后台模板"做得最敷衍的地方,也是正式上线后,openapi 、接口最容易引发安全问题的隐患。

    3. 写应用服务 = 写接口,没有 Controller

    后端的应用服务打个 [DynamicApi] 就直接暴露成 REST 接口了,零 Controller 样板,Scalar 文档自动生成。少写一半的胶水代码。

    4. 菜单只有一个事实源

    菜单、路由、组件路径、权限码、国际化键,全在后端一个 PageRegistry 里登记。前后端契约不会漂,再也不用"前端配一遍菜单、后端配一遍权限,两边对不上"。

    5. 前端的列表页是"配置"出来的

    全站二十多个列表页,几乎没有重复的 Search / Table 代码——我做了一套 Schema 驱动的列表框架:搜索、表格、导出都用配置生成,列设置、高级搜索、个人视图、行悬停速览、树形、列宽拖拽、导入导出开箱即用。而且权限 / 租户 / 偏好全程感知,你的列设置和搜索习惯还会同步到云端,多端一致。

    用户管理

    6. 全栈代码生成

    连上数据库,选一张表,实体、DTO 、仓储、服务、接口、前端页面一键生成,Scriban 模板可自定义。新增一个 CRUD 模块,从几小时变成几分钟。

    前端我也没敷衍

    后台的"前端"经常被当成附属品,但我在这上面花的心思不比后端少。

    偏好中心:亮 / 暗主题、主题色、布局风格、紧凑度都能调;更关键的是,你的偏好、列设置、搜索习惯会同步到云端——换台电脑登录,还是你熟悉的样子。

    偏好设置

    • 灵动岛:借了点手机的灵感,全局操作反馈、异步耗时任务进度都收敛到顶部一个小岛里,不再满屏弹 toast ;
    • 顺手的细节:多标签页、收藏夹、命令面板式全局搜索(键盘呼出,直达任意页面与操作)、超多的过渡动画——这些"小东西"才是每天用起来顺不顺手的关键;
    • 亮 / 暗双主题是认真做的,不是给 body 加个 class 了事,每个页面、每个组件都对过:

    用户管理(暗色)

    移动端不是 PC 页面的缩小版

    很多后台的"移动端"就是把 PC 页面硬塞进小屏。我是按移动端交互重新做的——登录、工作台、菜单、命令面板、消息中心,体验接近原生 App:

    安全和审计,是我最较真的部分

    做 B2B 系统,"谁、在什么时候、做了什么"必须查得到。系统内置六类日志——访问 / API / 操作 / 异常 / 登录 / 实体变更——各自独立写入;请求里的密码、令牌、密钥、身份证这些落库前自动脱敏;实体变更精确到字段,还能区分新增 / 修改 / 删除 / 恢复。

    操作日志

    配合前面说的字段级安全,越权访问、敏感数据泄露这些上线后最容易出事的点,从一开始就被框住了。

    还有这些

    剩下的功能我快速过一下:

    • 完整认证:JWT 双令牌、邮箱 / 短信验证码登录、OAuth2 ( GitHub / Google / QQ ,其他的可自行实现,底层都抽象出来了)、2FA 、多端登录控制;
    • 消息中心:系统公告 / 安全 / 业务 / 待办 / 紧急五类,顶部横幅、登录弹窗、强制阅读、按角色部门定向,SignalR 实时推送;
    • 网关能力:灰度发布(百分比 / 白名单 / 租户 / 请求头)、限流熔断、请求追踪、OpenAPI 签名加密;
    • 系统监控:CPU / 内存 / 磁盘 / 网络 / 服务状态一屏掌握;
    • 其它:文件多存储(本地 / S3 / OSS / COS / MinIO )、定时任务、审核工作流、富文本 / Markdown / Cron / JSON 编辑器、中英国际化……

    服务监控

    技术栈 & 谁适合用

    后端:.NET 10 / SqlSugar ( PostgreSQL / MySQL )/ Redis / SignalR / Serilog 前端:Vue 3.5 / TypeScript / Vite / Naive UI / Pinia / Tailwind CSS / Tiptap

    代码本身我也尽量写得能看:科学的框架结构,清晰的代码注释,直观的树形依赖——clone 下来不至于一脸懵,能比较快地理清它是怎么组织起来的。

    代码结构

    系统里还自带了一个"关于"页,把后端和前端用到的每一个开源依赖都列了出来——既是对这些项目的致敬,也方便你审一遍依赖再决定用不用:

    关于

    它可能适合你,如果你:

    • 想要一套"权限和多租户是真做了"的中后台起步模板,而不是又一个换皮的 admin ;
    • 在学 .NET + Vue 全栈,想看 DDD / CQRS 、动态 API 、RBAC + ABAC 怎么落地;
    • 在做 B2B SaaS ,需要租户隔离 + 套餐版本 + 权限白名单这套东西。

    跑起来很简单

    # 后端
    git clone https://github.com/XiHanFun/XiHan.BasicApp.git
    cd XiHan.BasicApp/backend
    dotnet run --project src/main/XiHan.BasicApp.WebHost --launch-profile Development
    
    # 前端(另开一个终端)
    cd ../frontend
    pnpm install && pnpm dev
    

    首次启动会自动建表 + 初始化种子数据,默认管理员账号 superadmin。后端 API 文档在 http://127.0.0.1:9708/scalar

    写在最后

    这个项目还会持续打磨,它并不完美——短信网关、支付还在路上,有些模块也还在重构。但它是我真刀真枪在用的东西,不是写给人看的样板。

    如果它能帮你少造一个轮子,或者给你一点全栈实践的参考,我就很满足了。

    如果想看某个模块的实现细节——比如多租户怎么隔离、字段级安全怎么做的、代码生成怎么写的——评论区告诉我,我可以单独拆一篇出来。

    7 replies    2026-06-27 22:44:48 +08:00
    YAFEIML
        1
    YAFEIML  
       8h 58m ago
    不错,star 支持
    afirefish
        2
    afirefish  
       6h 33m ago
    不错,star 支持
    dimwoodxi27
        3
    dimwoodxi27  
       6h 32m ago
    之前在 NaiveUI 官网看到过,前端 UI 组件设计感觉非常不错
    ddup
        4
    ddup  
       6h 30m ago
    不错,非常漂亮,同 .NET 开发,支持!
    burp2019
        5
    burp2019  
       5h 36m ago
    感谢分享,star 支持,难得看到 Net 的帖子
    idragonet
        6
    idragonet  
       5h 16m ago
    支持下! NET 开发路过。
    gowk
        7
    gowk  
       5h 13m ago
    .NET 开发路过,支持一下,加油!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   912 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 19:58 · PVG 03:58 · LAX 12:58 · JFK 15:58
    ♥ Do have faith in what you're doing.