# 推送历史显示权限修正记录

**日期**: 2026-06-07

## 变更摘要

`sync_logs` 新增 `push_permission` 字段，记录每次真实推送时 rsync 附加的 `--chown` / `--chmod` 策略；推送页、命令页推送日志、服务器同步日志均展示该列。

## 动机

用户需确认推送是否按配置将远程文件改为 `www:www` / `755` 等；此前仅审计/环境变量侧可知，推送历史无记录。

## 涉及文件

| 路径 | 说明 |
|------|------|
| `server/domain/models/__init__.py` | `SyncLog.push_permission` |
| `server/infrastructure/database/migrations.py` | 启动迁移加列 |
| `server/application/services/sync_engine_v2.py` | `rsync_push_permission_summary()`、写入日志 |
| `server/api/servers.py` | API 序列化 |
| `frontend/src/composables/push/*` | 列头与 `formatPushPermission` |
| `frontend/src/components/push/PushHistoryTable.vue` | 权限列 |
| `frontend/src/pages/CommandsPage.vue` | 推送日志视图 |
| `frontend/src/pages/ServersPage.vue` | 同步日志副标题 |
| `tests/test_rsync_push_permissions.py` | summary 单测 |

## 说明

- 仅 **文件推送（rsync）** 写入；文件管理器单独 `chmod` 仍在 **审计日志** `file_permission_change`。
- 历史记录在字段上线前的旧推送显示 `—`。
- 取消的推送不写入权限策略。

## 迁移 / 重启

- API 重启后自动 `ALTER TABLE sync_logs ADD COLUMN push_permission …`
- 前端需 build 部署

## 验证

```bash
pytest tests/test_rsync_push_permissions.py -q
cd frontend && npx vite build
```

推送成功后：`GET /api/servers/logs` 对应项 `push_permission` 为 `chown=www:www chmod=D755,F755`（默认配置）。
