做了好几个后台系统之后我把这套多租户中后台底座开源了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 双令牌、邮箱 / 短信验证码登录、OAuth2GitHub / Google / QQ其他的可自行实现底层都抽象出来了、2FA、多端登录控制消息中心系统公告 / 安全 / 业务 / 待办 / 紧急五类顶部横幅、登录弹窗、强制阅读、按角色部门定向SignalR 实时推送网关能力灰度发布百分比 / 白名单 / 租户 / 请求头、限流熔断、请求追踪、OpenAPI 签名加密系统监控CPU / 内存 / 磁盘 / 网络 / 服务状态一屏掌握其它文件多存储本地 / S3 / OSS / COS / MinIO、定时任务、审核工作流、富文本 / Markdown / Cron / JSON 编辑器、中英国际化……技术栈 谁适合用后端.NET 10 / SqlSugarPostgreSQL / 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需要租户隔离 套餐版本 权限白名单这套东西。跑起来很简单# 后端gitclone https://github.com/XiHanFun/XiHan.BasicApp.gitcdXiHan.BasicApp/backend dotnet run--projectsrc/main/XiHan.BasicApp.WebHost --launch-profile Development# 前端另开一个终端cd../frontendpnpminstallpnpmdev首次启动会自动建表 初始化种子数据默认管理员账号superadmin。后端 API 文档在http://127.0.0.1:9708/scalar。写在最后这个项目还会持续打磨它并不完美——短信网关、支付还在路上有些模块也还在重构。但它是我真刀真枪在用的东西不是写给人看的样板。如果它能帮你少造一个轮子或者给你一点全栈实践的参考我就很满足了。GitHubhttps://github.com/XiHanFun/XiHan.BasicAppGiteehttps://gitee.com/XiHanFun/XiHan.BasicApp源码导读https://deepwiki.com/XiHanFun/XiHan.BasicApp在线预览https://basicapp.xihanfun.comStar、Issue、PR、吐槽都欢迎。如果想看某个模块的实现细节——比如多租户怎么隔离、字段级安全怎么做的、代码生成怎么写的——评论区告诉我我可以单独拆一篇出来。