# 平台、客户层级与权限契约 ## 产品层级 - 当前产品只面向“平台、客户(企业)”两级,不把“租户”作为用户可见或需要运营选择的产品层级;多租户产品能力后续另行设计。 - Admin 页面、菜单、筛选、表单和提示统一使用“客户”或“企业”文案,不新增“租户选择器”“目标租户”等交互。 - 平台仓库属于平台公共主数据,不与客户绑定。托盘、库位等仓储资源页面应能独立查询全部客户和全部仓库,客户筛选不得控制仓库候选范围。 - 后端仍存在 `tenantId` 等字段时,只作为现阶段接口隔离细节保留在 API 适配层,不据此扩展用户可见产品层级;改动真实隔离模型前仍需单独确认。 ## Admin 菜单与只读权限 - 统一语义是“列表权限包含详情只读访问,操作权限独立”。存在正式列表页时,以稳定的 `*:list` 权限作为菜单、列表路由、详情路由、列表接口、详情接口及只读辅助接口的主权限。 - `create`、`edit`、`delete`、`status`、`approve`、`review`、`export`、`upload`、`complete` 等会改变数据、状态或产生文件的操作继续使用各自独立权限,不得因拥有 `list` 自动放行。 - 当前尚未上线;同一资源已有 `*:list` 时,不保留或新增独立 `*:view` 兼容分支。前端不得使用 `permissionAnyOf` 接受旧 `view`,后端不得使用 `hasAnyAuthority(list, view)`,初始化 SQL 应停用或删除旧 `view` 资源及其角色关联。 - 供应商固定使用 `platform:supplier:list` 作为菜单、列表和详情唯一只读权限;`platform:supplier:view` 必须停用或移除,不得在导航、路由、页面、Controller、OpenAPI 或 SQL 中恢复兼容。 ## 跨层同步 - 菜单结构、路由权限、页面按钮、Controller `@PreAuthorize`、OpenAPI 权限说明及 IAM 初始化/统一增量 SQL 必须同步核对,不能以局部测试通过替代跨层一致性。 - 业务功能任务只维护所属页面与接口,不得根据局部旧上下文覆盖共享导航、根路由装配、IAM 菜单权限初始化或统一增量脚本中的已确认语义。 - 发现共享文件与本契约冲突时,保留现有其他任务改动并交由对应总控统一收口;只有用户当前明确改变本契约时才能调整。 ## 维护入口 - 前端执行入口:`../apps/admin-web/AGENTS.md`、`../apps/client-web/AGENTS.md`。 - 后端执行入口:`../baiyue-firstleg/iam/AGENTS.md`、`../baiyue-firstleg/auth/AGENTS.md` 及目标业务服务最近的 `AGENTS.md`。 - 本文件维护稳定产品语义;具体权限码、菜单路径、Controller 和 SQL 路径由最近的项目或模块索引维护。