# Platform Specification ## Purpose 定义跨前后端、跨模块的全局规范:时间、多租户隔离、URL 契约与安全红线,作为所有 spec 的共同约束。 ## Requirements ### Requirement: 统一时间戳格式 系统 SHALL 在 API 层以 Unix 毫秒时间戳(number)表示所有时间字段,前端负责本地化显示。 #### Scenario: 接口返回时间 - **WHEN** 任一接口返回时间字段 - **THEN** 该字段为 Unix 毫秒整数(number),不返回格式化字符串 ### Requirement: 多租户数据隔离 所有业务数据 SHALL 归属某一租户;任何业务接口 SHALL 仅返回当前租户的数据。 #### Scenario: 跨租户越权 - **WHEN** 用户 A(租户 1)请求租户 2 的数据 - **THEN** 系统拒绝或返回空,绝不返回租户 2 的数据 ### Requirement: URL 契约 所有 API SHALL 统一挂载在 `/api/v1` 前缀下。 #### Scenario: 版本前缀 - **WHEN** 客户端调用任一业务接口 - **THEN** 路径以 `/api/v1` 开头 ### Requirement: 安全红线 系统 SHALL 不以明文存储或传输密码;日志 SHALL 对手机号、邮箱、密码等敏感信息脱敏。 #### Scenario: 密码存储 - **WHEN** 用户设置或修改密码 - **THEN** 系统仅存储不可逆哈希,绝不落明文 #### Scenario: 日志脱敏 - **WHEN** 记录操作/登录日志 - **THEN** 密码字段不落日志,手机号/邮箱部分打码 ### Requirement: 脚手架可定制面 脚手架 SHALL 为 fork 项目划定「可定制面」:框架自带模块/页面/服务为框架代码,fork 项目只读不改;业务新增代码落入独立业务目录,与框架目录分离,保证上游升级可经 git merge 干净同步。 #### Scenario: 框架代码只读 - **WHEN** fork 项目需要扩展能力 - **THEN** 不修改框架自带模块/页面/服务,而是新增业务模块/页面或经扩展点定制 #### Scenario: 业务代码落点 - **WHEN** fork 项目新增业务 - **THEN** 代码落入独立业务目录(后端新域 `src//`、前端新页面 `src/pages//`),不侵入框架目录 #### Scenario: 数据驱动扩展点 - **WHEN** fork 项目需要定制外观或权限 - **THEN** 优先经数据驱动扩展点(租户品牌、字典、主题色、资源注册 tenant-template)而非改源码