## ADDED Requirements ### Requirement: Admin Import Tasks Provide Source File Download Actions The admin import task pages SHALL provide a source-file download action for eligible task rows and SHALL gate the action with page-specific permissions. #### Scenario: Show download action on IoT card task rows - **GIVEN** 后台 IoT 卡任务列表中的某条任务记录包含可下载的原始文件标识 - **AND** 当前用户具备该页面的下载文件权限 - **WHEN** 任务列表渲染该条记录 - **THEN** 该条记录的操作列 MUST 显示“下载文件” - **AND** 用户点击后,页面 MUST 通过 `POST /api/admin/storage/batch-download-urls` 获取该文件的下载地址并发起下载 #### Scenario: Show download action on device task rows - **GIVEN** 后台设备任务列表中的某条任务记录包含可下载的原始文件标识 - **AND** 当前用户具备该页面的下载文件权限 - **WHEN** 任务列表渲染该条记录 - **THEN** 该条记录的操作列 MUST 显示“下载文件” - **AND** 用户点击后,页面 MUST 通过 `POST /api/admin/storage/batch-download-urls` 获取该文件的下载地址并发起下载 #### Scenario: Hide task download action when permission or file key is missing - **GIVEN** 某条任务记录缺少可下载文件标识,或当前用户不具备该页面的下载文件权限 - **WHEN** 任务列表渲染该条记录 - **THEN** 页面 MUST NOT 显示“下载文件”入口 ### Requirement: Admin Operation Logs Provide Inline File Download Actions The admin asset operation log views SHALL append an inline download action next to `文件存储键` / `file_key` values when a downloadable file exists. #### Scenario: Asset detail operation log shows inline download action - **GIVEN** 用户在资产详情页查看操作审计日志 - **AND** 某条日志变更内容包含 `文件存储键` 或 `file_key` - **AND** 当前用户具备资产详情页日志下载权限 - **WHEN** 该日志内容被渲染 - **THEN** 页面 MUST 在对应文件键值后显示“下载文件” - **AND** 用户点击后,页面 MUST 通过 `POST /api/admin/storage/batch-download-urls` 获取该文件的下载地址并发起下载 #### Scenario: IoT card list log dialog shows inline download action - **GIVEN** 用户从 IoT 卡列表打开操作审计日志弹窗 - **AND** 某条日志变更内容包含 `文件存储键` 或 `file_key` - **AND** 当前用户具备 IoT 卡列表日志下载权限 - **WHEN** 该日志内容被渲染 - **THEN** 页面 MUST 在对应文件键值后显示“下载文件” #### Scenario: Device list log dialog shows inline download action - **GIVEN** 用户从设备列表打开操作审计日志弹窗 - **AND** 某条日志变更内容包含 `文件存储键` 或 `file_key` - **AND** 当前用户具备设备列表日志下载权限 - **WHEN** 该日志内容被渲染 - **THEN** 页面 MUST 在对应文件键值后显示“下载文件” #### Scenario: Hide inline log download action without permission or file key - **GIVEN** 某条日志不包含可下载文件键值,或当前用户不具备当前入口的日志下载权限 - **WHEN** 该日志内容被渲染 - **THEN** 页面 MUST NOT 显示“下载文件”入口 ### Requirement: Admin File Download Permissions Remain Entry-Specific The admin file-download entry points MUST use distinct permission checks per page context instead of sharing one global download permission. #### Scenario: Task page permissions are isolated - **GIVEN** 某用户具备设备任务页的下载文件权限,但不具备 IoT 卡任务页的下载文件权限 - **WHEN** 用户分别访问两个任务页 - **THEN** 设备任务页 MAY 显示“下载文件” - **AND** IoT 卡任务页 MUST NOT 因设备任务权限而显示该入口 #### Scenario: Shared log component respects caller-specific permissions - **GIVEN** 某用户具备 IoT 卡列表日志下载权限,但不具备设备列表日志下载权限 - **WHEN** 同一共享日志组件分别在两个入口渲染包含 `file_key` 的日志 - **THEN** IoT 卡列表入口 MAY 显示“下载文件” - **AND** 设备列表入口 MUST NOT 因共享组件复用而错误显示该入口