B-64: B-38~B-41 收口:安全修复、提交与 PR #1

Open
leefer wants to merge 0 commits from feat/b64-closeout-b38-41 into main
Owner

关联子卡

Closes B-64
B-38、B-39、B-40、B-41 与 B-64 的收口提交。

内容

  • B-38 样本数据安全:运行数据目录隔离(data/、uploads/、exports/ 不进仓库)。
  • B-39 持久化:SQLite 版本化迁移、SHA-256 内容哈希不可变导入、文件/行/批次幂等。
  • B-40 认证与租户隔离:PBKDF2 密码散列、会话、限流、审计日志、服务端公司权限边界。
  • B-41 动态主数据:公司、银行账户、别名、审核轨迹,全部来自数据库。
  • B-64 安全修复:公司账号初始密码改为随机一次性口令(不等于用户名、只显示一次);跨公司相同内容上传只返回通用重复状态,不再泄露原批次 ID、银行、模板、期间、交易数或诊断。

验收

  • PYTHONPATH=src python -m unittest discover -s tests -v 85 项全绿。
  • node --check web/app.js 通过。
  • git ls-files data/ uploads/ exports/ 为空。
## 关联子卡 Closes B-64 B-38、B-39、B-40、B-41 与 B-64 的收口提交。 ## 内容 - B-38 样本数据安全:运行数据目录隔离(data/、uploads/、exports/ 不进仓库)。 - B-39 持久化:SQLite 版本化迁移、SHA-256 内容哈希不可变导入、文件/行/批次幂等。 - B-40 认证与租户隔离:PBKDF2 密码散列、会话、限流、审计日志、服务端公司权限边界。 - B-41 动态主数据:公司、银行账户、别名、审核轨迹,全部来自数据库。 - B-64 安全修复:公司账号初始密码改为随机一次性口令(不等于用户名、只显示一次);跨公司相同内容上传只返回通用重复状态,不再泄露原批次 ID、银行、模板、期间、交易数或诊断。 ## 验收 - `PYTHONPATH=src python -m unittest discover -s tests -v` 85 项全绿。 - `node --check web/app.js` 通过。 - `git ls-files data/ uploads/ exports/` 为空。
leefer added 6 commits 2026-08-16 02:49:40 +08:00
运行时数据、真实银行上传文件与导出文件一律不进仓库;样本仅限
流水模板/ 中已脱敏的六份。新增 data/、uploads/、exports/、日志与
PID 文件的忽略规则。
- 版本化 SQLite 迁移(向前/回滚)与连接助手。
- 导入管线:上传文件按 SHA-256 内容哈希不可变保存,文件/行/批次
  幂等;重复上传返回 duplicate 并复用已有批次,不产生第二份事实。
- 每条规范化源行反查文件、工作表、原始行号与模板版本。
- 解析失败保留 exception/failed 批次与诊断,不产生已确认交易。
- 决策记录见 docs/decisions/002-persistence.md。
- 管理员/公司两类角色:PBKDF2 密码散列、随机初始密码、首次改密、
  停用、重置密码与吊销会话。
- 会话只存令牌摘要,8 小时绝对过期;登录失败同 (账号,IP) 限流。
- 公司账号服务端绑定唯一公司;读取/上传/导出/主数据/审核接口逐项
  服务端授权,跨公司访问返回 404 而非 403。
- 审计日志记录登录、改密、上传、导出、建公司、建/停/启用户。
- 决策记录见 docs/decisions/003-auth.md。
- 公司、公司账号、银行账户、账户类型、户名/账号别名和生效区间
  全部来自数据库,新增公司无需改代码即可检索与使用。
- 公司端提交账户登记,总账端审核为启用/退回/停用;未启用账户
  不参与所有权识别、上传或覆盖计算。
- 账号归一化、脱敏显示与数据库 UNIQUE 约束,并发提交不产生重复
  有效账户;别名匹配有优先级和有效期。
- 所有主数据变更记录前值、后值、操作人、时间和原因。
- 决策记录见 docs/decisions/004-master-data.md。
- server.py 新增认证、批次/行/导出、公司/账号/别名主数据、审核
  与审计接口,全部在服务端实施租户隔离与权限校验。
- 前端接入真实登录、首次改密、公司账号、账户登记/审核、批次查询
  与上传持久化;移除演示账号密码预填。
- README 更新运行、登录与样本数据政策说明;HANDOFF 同步默认监听
  行为。DESIGN-TOKENS 与样式对齐当前中性石墨玻璃视觉。
- 公司账号创建改为随机一次性初始密码,只在创建响应中显示一次,
  密码保证不等于用户名;删除「用户名即初始密码」兼容分支,继续
  强制首次登录改密。
- 跨公司相同字节文件上传只返回通用重复状态:不再返回其他公司的
  原批次 ID、银行、模板、期间、交易数或诊断;同公司重复上传的
  幂等摘要保持可用。
- 补充服务端回归测试,覆盖同公司与跨公司两个分支及随机密码;
  完整测试 85 项全绿,node --check 通过。
Checking for merge conflicts…
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin feat/b64-closeout-b38-41:feat/b64-closeout-b38-41
git checkout feat/b64-closeout-b38-41
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leefer/caiwuzongzhang#1