Smail/docs/开发启动权限说明.md
smail 882171915c
Some checks are pending
Security Checks / security (push) Waiting to run
优化开发启动权限并减小前端首屏体积
2026-09-06 23:26:55 +08:00

67 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 开发启动权限说明
## 需求与任务
- [x] 开发阶段不因管理员密码重置通道要求提升整个后端权限。
- [x] 保留当前配置、数据库与 HTTPS 行为,不清空数据。
- [x] 正式部署默认保留 Windows 命名管道和 Linux 本机套接字的严格检查。
- [x] 开发时关闭重置入口,而不是取消入口鉴权。
- [✓] 普通权限启动与后端回归测试验收。
- [!] 自动停止并重启验收:本次执行工具拦截了停止命令,未完成重启验证。
## 使用当前数据库进行开发
在普通 PowerShell 中运行:
```powershell
Set-Location D:\Desktop\Smail
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/build.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service backend
powershell -NoProfile -ExecutionPolicy Bypass -File deploy/start-dev.ps1 -Service frontend
```
后端启动入口默认先编译当前源码及内置插件,再带明确的开发停用参数启动,不请求 UAC 提升。前端使用 Vite 热更新,不会因此切换后端配置模式。首次需完整构建以准备 Go 嵌入资源;后续只改后端时直接运行 `start-dev.ps1 -Service backend` 即可。已自行完成最新构建时可加 `-SkipBuild`,脚本会提示由调用者确认版本。不要无参数双击历史二进制:无参数属于正式模式,恢复通道权限检查仍会生效。
此参数只停用本机超级管理员密码重置通道,不改变配置文件选择,仍读取 `config/config.json`。账号、数据库、HTTPS、Cookie 和 CSRF 策略均沿用原配置。开发日志会明确提示重置通道已停用。
2026-09-05 配置管理修复后,当前 `config/config.json` 已迁移为分区根配置。必须先执行上面的编译命令,再运行新二进制;不要直接运行迁移前保留的旧程序。备份和本次验收边界见《配置管理接入修复验收》。后续修复期间已成功普通权限停止旧后端并启动新后端,下方早期停止受阻记录仅反映当时状态。
启动脚本以普通权限在后台运行服务,并输出进程编号;停止时先核对进程路径,再使用 `Stop-Process -Id <进程编号>`。日志位于 `test-log/runtime/`,二进制位于 `out/backend/`。脚本显式设置 `SMAIL_ROOT` 指向项目根目录 `D:\Desktop\Smail`,运行文件统一位于根目录 `config/`,避免在 `backend/` 或 `out/` 下生成另一份配置或数据库。若旧 `backend/config/` 中仍有配置、密钥或数据库,脚本拒绝启动,要求先完成迁移。其他端口占用、文件权限或系统限制仍需分别处理,此参数不保证绕过所有操作系统权限问题。
## 原有开发模式
```powershell
Set-Location D:\Desktop\Smail\backend
$env:SMAIL_ROOT = 'D:\Desktop\Smail'
go run . dev
```
末尾 `dev` 仍读取 `config/config.dev.json` 并启用项目原有开发行为,现在也会停用管理员重置通道。该文件可能使用另一份数据库,不应为解决权限问题直接切换过去。开发模式下不再使用 `SMAIL_ADMIN_CONTROL_PATH` 创建重置通道。
`SMAIL_ROOT` 必须是 `config/` 的父目录,不能设置成 `D:\Desktop\Smail\config`,否则会变成 `config/config/`。直接运行 `out/backend/` 下的程序或管理工具时也应显式设置该变量;默认可执行文件目录规则为独立正式部署保留,不自动猜测源码位置。
## 正式部署
- 移除 `--dev-disable-admin-reset`,不要以末尾 `dev` 启动。
- Windows 保持受保护命名管道及管理员客户端校验;Linux 保持受保护本机套接字及对端身份校验。
- 安装需要的管理员权限不等于业务必须以管理员运行。Linux 服务使用 `smail` 账户和最小端口绑定能力;Windows 使用专用服务身份。正式服务身份对管道的可用性需要在真实安装环境单独验收,不能把普通开发参数作为生产修复。
- 通道创建或运行失败仍会让正式后端启动失败或退出,不静默降级。
- 没有新增 HTTP、局域网或公网重置接口。
- 启动参数属于部署主机权限边界,不能由网页请求切换。不要把开发启动命令复制进正式服务配置。
开发模式不能用于验收真实管理员恢复功能;该功能需在对应系统的正式权限条件下单独验收。
## 本次验证记录
2026-09-05 在 Windows 普通权限会话中验证:
- 当前进程管理员角色检查为 `False`。
- 使用上述独立开发参数启动最新编译后端,日志显示开发通道停用和邮箱服务就绪。
- 后端监听 80、443、25、465、587、110、993、995 端口。
- 后端 `/api/ping`、前端 15173 端口代理 `/api/ping` 均返回 200。
- 前端使用 `Accept: text/html` 请求首页返回 200,并包含 Vite 客户端。
- `go test ./res_init ./services/adminreset` 和 `go test ./...` 均通过。
- 正式模式创建失败、空通道和运行失败仍上报错误的自动测试通过;没有把这些单元测试当作 Linux 或 Windows 正式部署验收。
- 没有清空真实数据库,没有重置账号或修改密钥;本次未进行浏览器业务流程回归。
- 自动停止命令被执行工具策略拦截,没有绕过限制;后端保持运行,不宣称重启验收通过。