2f7a81ff3da8631f1c2ecca7ac09085d1d391906
现象
----
收紧某字段读权限后,后端已把值抹成 null,但表格列照常渲染 —— 留下一列
全是「-」的空表头,白占屏幕宽度。反馈的「专业名称」即属此类。
两处前提与代码不符,先澄清
----
· 列展示设置里**已有**「专业名称」选项(list.vue:190),columns.commonName
也**已在** columns 数组中(默认 visible: true)—— 无需补充。
该选项与表格列都走 hasColPermission('commonName'),没有权限者看不到选项,
与「没权限就看不见这列」的目标一致,并非缺陷。
· 真正的缺陷在同一处:**表格列只有 columns.X.visible,没有权限守卫**。
16 个数据列里仅 isApprovalRequired 有(且用错了码)。
改动
----
一、给全部数据列补上 && hasColPermission('<key>')(两文件各 15 列;
isApprovalRequired 原先写成 userStore.hasPermission('material_list:isApprovalRequired'),
改为同一函数,避免复选框与表格列各用一套口径)。
二、修正 permissionMap 两处与后端读过滤的口径错位:
isInspectionRequired: material_list:operation → material_list:isInspectionRequired
isApprovalRequired: material_list:operation → material_list:isApprovalRequired
(以 app/utils/field_permissions.py 为准)
★ 为什么第 2 步是必须的:前端按 operation 判断会以为「有权限」,而后端其实
按另一个码把字段抹成了 null —— 于是渲染出一列全是「-」的空表头。
前端判定码必须与后端读过滤码**逐字段一致**,否则修了守卫也照样是空列。
验证
----
· 两个文件的数据列 100% 带权限守卫(grep 复核)
· 前端 permissionMap 与后端 STOCK_FIELD_RBAC_MAPPING 逐字段比对:
16 项中 14 项完全一致;id / isEnabled 两项前端更严(后端为公开字段)——
方向安全,不会产生空列
· 前端 vite build 通过
Description
No description provided
Languages
Python
70.2%
CSS
14.9%
Vue
7.6%
HTML
4.2%
TypeScript
3.1%