Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
74 lines
4.4 KiB
Markdown
74 lines
4.4 KiB
Markdown
# **子域名 iit.xunzhengyixue.com SSL 证书全流程配置指南 (针对 SAE/CLB 架构)**
|
||
|
||
根据你的《2025版部署手册》,你的公网入口为 CLB(IP: 8.140.53.236),后端为 SAE 应用。为了满足企业微信/服务号的 HTTPS 强制要求,请严格按照以下四个阶段执行操作。
|
||
|
||
## **阶段一:证书申请(在你的阿里云账号操作)**
|
||
|
||
1. **进入控制台**:登录你的阿里云账号,搜索进入 **“数字证书管理服务”**。
|
||
2. **创建证书名额**:
|
||
* 点击 **“正式证书”** \-\> **“个人测试证书(免费)”**。
|
||
* 点击 **“创建证书”**,获得一个“待申请”状态的名额(每年有 20 个免费额度)。
|
||
3. **提交申请信息**:
|
||
* 在对应条目点击 **“证书申请”**。
|
||
* **证书绑定域名**:填写 iit.xunzhengyixue.com。
|
||
* **域名验证方式**:**必须选择“DNS 验证”**。
|
||
* **CSR 生成方式**:选择“系统生成”。
|
||
4. **获取验证信息**:提交后,页面会显示 **主机记录**(如 \_dnsauth.iit)和 **记录值**(一串随机长字符串)。请记录下来发给持有域名的同事。
|
||
|
||
## **阶段二:域名连接与验证(跨账号协作)**
|
||
|
||
此阶段需要你同事在其阿里云账号(xunzhengyixue.com 持有者)下操作:
|
||
|
||
1. **建立 A 记录(建立连接)**:
|
||
* **主机记录**:iit
|
||
* **记录类型**:A
|
||
* **记录值**:8.140.53.236(指向你的 SAE CLB 公网 IP)
|
||
* **目的**:让访问者能找到你的服务器。
|
||
2. **建立 TXT 记录(证书验证)**:
|
||
* **主机记录**:填写你从阶段一获得的 \_dnsauth.iit。
|
||
* **记录类型**:TXT
|
||
* **记录值**:填写你发给他的那串长字符串。
|
||
* **目的**:证明你对该子域名拥有控制权。
|
||
3. **完成签发**:同事添加成功后,回到你的证书控制台点击 **“验证”**。等待 10-30 分钟,状态变为“已签发”。
|
||
|
||
## **阶段三:SAE 部署证书(核心步骤)**
|
||
|
||
等证书签发后,需要将“钥匙”挂在大门(CLB)上。
|
||
|
||
1. **下载证书**:在控制台点击下载,服务器类型选择 **“Nginx”**。解压得到 .pem(证书)和 .key(私钥)文件。
|
||
2. **配置 SAE 访问设置**:
|
||
* 进入 SAE 控制台 \-\> 应用 frontend-nginx-service \-\> **访问设置**。
|
||
* 找到已有的公网 CLB 访问记录,点击 **“修改配置”**。
|
||
3. **添加 HTTPS 443 监听**:
|
||
* **保留原有 80 端口规则**:不要删除它。
|
||
* **添加监听**:
|
||
* **协议**:HTTPS
|
||
* **HTTPS 端口**:443(标准加密端口)
|
||
* **SSL 证书**:选择“自定义上传”,用记事本打开那两个文件,完整复制内容贴入对应的“证书内容”和“私钥内容”框中。
|
||
* **双向认证**:**必须关闭 (OFF)**。
|
||
* **容器端口**:填写 80(对应你手册 5.2 节 Nginx 容器的端口)。
|
||
4. **开启 HTTP 重定向至 HTTPS**:
|
||
* 在刚才的“修改配置”弹窗中,找到 **HTTP 80** 那一行规则。
|
||
* 勾选下方的 **“HTTP 重定向至 HTTPS”** 开关。
|
||
* **目的**:用户输入 http://... 会自动强制跳转到安全的 https://...。
|
||
|
||
## **阶段四:验证与微信端联调**
|
||
|
||
1. **全链路测试**:
|
||
* 访问 https://iit.xunzhengyixue.com/api/v1/health。
|
||
* 若返回 JSON 且地址栏显示“小绿锁”,说明 HTTPS 链路已通。
|
||
2. **微信校验文件部署**:
|
||
* 从企业微信/服务号后台下载 WW\_verify\_xxx.txt。
|
||
* 放入前端代码的 public 目录(这样打包后会在根目录)。
|
||
* 运行 docker build 和 docker push(参考手册 11.1 节)。
|
||
* 在 SAE 点击“部署应用”更新镜像。
|
||
* 确保 https://iit.xunzhengyixue.com/WW\_verify\_xxx.txt 可被外部访问。
|
||
|
||
## **💡 避坑总结**
|
||
|
||
* **端口别写错**:是 **443**,不是 433 或其他。
|
||
* **双向认证**:千万别开,开了 PI 的手机就连不上了。
|
||
* **容器端口**:CLB 负责解密,解密后依然把流量发给容器的 **80** 端口,所以容器端口填 80 是正确的。
|
||
* **解析优先级**:同事加 A 记录时,确保没有冲突的 CNAME 记录指向同一主机名 iit。
|
||
|
||
**当前状态**:SOP Fully Detailed | **建议**:证书签发后,第一时间按“阶段三”进行 CLB 配置。 |