现在到底做到哪一步
和 README 同一张表,照实写。没在生产跑起来的,一律不标完成。
- Go 后端地基(租户 / 认证 / 权限) 已上线
- 代码完成,已在生产跑着。
- 多租户隔离(PostgreSQL RLS) 已上线
- 已在真实数据库上验证:一个租户碰不到另一个租户的数据,显式写查询也碰不到。
- React 前端 进行中
- 25 个模块页面都在。service 层正按模块从老 PHP 协议迁到 Go API。
- 业务模块(客户 / 商机 / 交付 / 财务…) 进行中
- 产品、客户、商机、报价、交付已经能用。财务与提成还没写。
怎么搭的
- Go 1.23 + Echo v4
- 中间件链承担租户注入、鉴权、限流。
- PostgreSQL 16 + 行级安全
- 每请求 SET
app.tenant_id。应用以非 owner 角色连库,handler 漏写WHERE tenant_id数据库也挡得住。 - sqlc + pgx/v5
- 手写 SQL 生成类型安全 Go。不用 ORM,报表跑的就是你读到的那条查询。
- JWT,access 15 分钟 + refresh 7 天可吊销
- 登录为租户 code + 用户名 + 密码;用户名在租户内唯一。
- React 18 + umi + Ant Design
- 全站三语:English、Bahasa Indonesia、简体中文。
接下来做什么
按这个顺序。前一步没跑通,后一步没有意义。
- 把前端 service 层剩下的部分按模块从 PHP action 协议迁完到 Go REST API。
- 做交付的文件上传 —— 让任务的资料存在系统里,而不是散在聊天记录里。
- 写财务与提成模块 —— 最后两块还没做的业务。
许可证
AGPL-3.0。AGPL 和 GPL 的差别只在一处,但对 CRM 正好要紧:把改过的版本架在网上给别人用,就必须向那些使用者提供你这个版本的源码。自己用、或原样部署不触发任何义务。
AGPL 不合适的话 —— 比如想基于它开发但不公开改动 —— 可以单独谈商业授权,开 issue 即可。