功能总览
元点Saas 不是单一后台模板,而是一套包含平台运营、租户后台、公共前台、移动端主壳和插件应用体系的多端 SaaS 框架。系统能力按使用对象分为平台侧、租户侧、前台用户侧、插件侧和运维侧。
系统入口
| 入口 | 代码目录 | API 应用 | 典型域名 | 使用对象 |
|---|---|---|---|---|
| 平台后台 | platform/ | platformapi | admin.example.com | SaaS 平台运营者 |
| 租户后台 | tenant/ | tenantapi | {tenant}.example.com | 租户管理员 |
| PC 前台 | pc/ | api | example.com | C 端用户 / 访客 |
| 移动端 | uniapp/ | api | H5 / 小程序 / App | C 端用户 |
| 插件应用 | server/plugins/{code} | 插件路由 | 随平台或租户挂载 | 行业应用开发者 |
平台侧能力
平台后台负责 SaaS 运营和全局资源管理。
| 模块 | 主要能力 | 相关代码 |
|---|---|---|
| 仪表盘 | 租户数、订单、收入、趋势统计 | DashboardController / DashboardService |
| 租户管理 | 创建租户、分配套餐、启停租户、查看生命周期 | TenantController / TenantService |
| 套餐管理 | 价格、时长、存储配额、功能开关、插件授权 | PlanController / PlanService |
| 插件管理 | 上传、登记、安装、升级、卸载、清理 | PluginController / PluginService |
| 插件市场 | OAuth 连接、目录同步、安装意图、升级和授权校验 | platformapi/controller/v1/marketplace |
| 订单退款 | SaaS 订阅订单、线下确认、取消、退款 | SaasOrderService / RefundController |
| 移动构建 | 查看租户移动端构建任务与产物 | MobileBuildController |
| 平台系统 | 平台管理员、角色、菜单、字典、文件、定时任务、API 文档 | platformapi/controller/v1/system |
平台侧请求使用 platform_context 和 platform_auth,与租户侧 JWT 密钥隔离。
租户侧能力
租户后台继承通用后台能力,并增加 SaaS 自服务能力。
| 模块 | 主要能力 | 权益关系 |
|---|---|---|
| 主页 | 业务统计、快捷入口、平台公告 | 基础能力 |
| 系统管理 | 管理员、角色、部门、菜单、字典、配置、日志 | RBAC 控制 |
| 用户管理 | 前台用户、积分、资料管理 | 基础能力 |
| 内容与反馈 | 公告、协议、反馈、CMS 插件内容 | 可由插件增强 |
| 装修 | 首页、页面、组件、链接目录、插件组件渲染 | 受插件和移动配置影响 |
| 渠道管理 | 微信公众号、自动回复、小程序配置 | 受套餐功能控制 |
| 文件管理 | 上传、分组、存储驱动 | 受套餐存储配额控制 |
| 插件应用 | 查看、启用、禁用、配置已授权插件 | 受套餐授权和单独购买控制 |
| 续费订阅 | 当前套餐、到期时间、续费支付、订单记录 | 生命周期核心流程 |
| 移动端配置 | 名称、图标、TabBar、构建目标和构建记录 | 受移动端构建能力控制 |
| 代码生成器 | 表结构生成后端和前端 CRUD | 需要 code.generator 功能 |
租户侧请求会经过租户解析、租户认证、生命周期状态、插件权益、RBAC 和操作日志等中间件。
多租户隔离
系统采用物理入口隔离和代码级租户上下文双重防线:
admin.example.com只进入平台后台和platformapi。{tenant}.example.com进入租户后台和tenantapi,子域名会解析成租户 code。TenantContext在请求进入时写入租户 ID、租户 code、套餐和生命周期信息。- 继承
core\base\Repository的租户级查询使用$this->query()自动追加tenant_id过滤。 - 平台 token 和租户 token 使用不同 JWT secret,跨 scope token 会被拒绝。
- Redis、日志、文件配额和插件权益都按租户边界处理。
SaaS 商业闭环
| 环节 | 说明 |
|---|---|
| 套餐 | 定义价格、有效期、存储上限、功能开关和插件授权 |
| 订阅 | 记录租户当前有效权益,支持试用、正式订阅、续费和升级 |
| 订单 | 创建支付单,处理微信/支付宝支付、取消、退款和线下确认 |
| 生命周期 | 根据订阅到期自动流转 trial、active、grace、frozen、disabled |
| 功能开关 | 后端 TenantFeatureService 和前端 v-feature 同语义控制功能入口 |
| 配额 | 上传前校验存储上限,成功后原子累加,删除后防下溢释放 |
插件应用体系
插件是系统的业务扩展单元,统一放在 server/plugins/{code}。
| 插件形态 | 适用场景 | 租户侧表现 |
|---|---|---|
kind=app | 商城、CMS、CRM、工单等完整业务 | 作为一级应用进入菜单 |
kind=plugin | 积分兑换、营销组件、支付扩展、装修组件 | 进入插件中心或被其他模块调用 |
插件可以同时提供:
- 后端 API、Service、Repository、迁移和生命周期钩子。
- 租户后台页面、API 封装和菜单权限。
- UniApp 分包页面、装修组件和移动端入口。
- manifest 中声明的插件依赖、授权 code、分类、兼容版本和移动端页面。
当前仓库内置 mall 和 cms 示例插件,可作为插件结构参考。
移动端与装修
移动端采用主壳加插件分包的模式:
uniapp/提供基础应用壳、用户中心、首页渲染和通用能力。- 租户在后台配置应用名称、图标、小程序信息、TabBar 和首页装修。
- 构建时系统根据租户权益筛选插件,只复制已授权插件的 UniApp 源码。
PagesJsonGenerator合并基础页面和插件页面,生成租户专属pages.json。- 构建驱动支持本地、Docker 和远程构建。
装修系统负责 PC 与移动端页面的可视化配置,插件可以注册自己的装修组件和链接入口。
安全与质量边界
系统把以下能力作为不可破坏的红线:
- 租户 A 不能通过列表或 ID 注入读取租户 B 数据。
- 平台上下文不能意外泄露租户数据。
- 平台和租户 token 不能互相使用。
grace状态只读,frozen状态仅放行续费白名单。- 存储配额必须硬拦截,释放不能下溢。
- 未开通功能或插件权益时必须拒绝访问。
- 插件包不能包含路径穿越、危险文件或不兼容 manifest。
开发或升级系统后,应至少运行后端测试和前端类型检查,详情见 开发检查清单。
