Files
one-pipe-system/openspec/changes/update-list-status-hide-without-permission/proposal.md
sexygoat 38cf7d12e9
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 4m42s
fix: 真流量虚流量权限
2026-05-14 10:52:11 +08:00

2.5 KiB

Change: 列表状态字段无权限时改为隐藏而不是禁用

Why

当前多个列表页对“状态 / 上架状态 / 激活状态”采用 disabled 开关来处理无权限用户。这样虽然阻止了正常点击,但仍然暴露了前端交互控件,既不符合“无权限不应展示操作入口”的权限体验,也会引发对 DOM 篡改后是否还能触发接口调用的安全疑虑。

业务现在明确要求:对于列表中的状态类交互字段,如果用户没有对应权限,则前端直接隐藏该字段,不再显示禁用态开关。

What Changes

  • 将以下列表页中的状态类交互字段统一从“无权限时禁用”改为“无权限时隐藏”:
    • 角色管理:role:update_status
    • 运营商管理:carrier:update_status
    • 套餐系列:package_series:update_status
    • 套餐列表-状态:package:update_status
    • 套餐列表-上架状态:package:update_away
    • 代理系列授权:series_grants:update_status
    • 店铺列表:shop:modify_status
    • 账号列表:account:modify_status
    • 企业客户:enterprise_customer:status
    • 微信配置-激活状态:wechat_config:status
  • 对于无权限用户:
    • 前端列表中不再渲染对应状态字段/列
    • 前端不再渲染 disabled 的 ElSwitch 或其他禁用态交互控件作为占位
  • 对于有权限用户:
    • 保持现有状态切换交互与接口调用行为不变
  • 套餐列表需要将“状态”和“上架状态”视为两个独立权限入口分别控制显示
  • 本次仅调整列表页中的状态类交互字段展示策略,不修改搜索栏状态筛选项,也不扩展到详情页或新增/编辑弹窗中的表单字段
  • 前端隐藏仅作为 UI 层权限收敛,不能替代后端接口鉴权;后端仍需继续拒绝无权限的直接状态更新请求

Impact

  • Affected specs:
    • list-status-permission-visibility
  • Affected code:
    • src/views/system/role/index.vue
    • src/views/system/carrier-management/index.vue
    • src/views/package-management/package-series/index.vue
    • src/views/package-management/package-list/index.vue
    • src/views/package-management/series-grants/index.vue
    • src/views/shop-management/list/index.vue
    • src/views/account-management/account/index.vue
    • src/views/account-management/enterprise-customer/index.vue
    • src/views/settings/wechat-config/index.vue
  • Dependencies:
    • 现有 useAuth / hasAuth 权限判断
    • 现有后端状态更新接口权限校验