记录当前Git开发基线、Kingbase真实表结构、培训数据与权限状态。 补充数据库与代码差异、只读兼容性验证及PRD V1.0核心对象映射,未包含业务代码或数据库修改。
6.2 KiB
Phase 0:培训菜单与权限实时快照
数据来自
public.sys_menu、public.sys_role、public.sys_user_role、public.sys_role_menu的只读统计,不输出用户身份或密码字段。
1. 培训菜单是否真实存在
是。实时 public.sys_menu 中有23条培训相关菜单:6个目录、17个页面菜单。所有记录均为 visible=0、status=0,路径和组件没有重复。
| ID | 菜单 | 类型 | path | component | perms |
|---|---|---|---|---|---|
| 2154 | 教学设施 | 目录 | equip |
— | 空 |
| 2155 | 教师信息 | 页面 | teacher |
train/teacher |
空 |
| 2156 | 学员信息 | 页面 | student |
train/student |
空 |
| 2157 | 教室信息 | 页面 | classroom |
train/classroom |
空 |
| 2158 | 实训场地 | 页面 | site |
train/site |
空 |
| 2159 | 人员管理 | 目录 | person |
— | 空 |
| 2160 | 设备物联 | 页面 | extra |
train/extra |
空 |
| 2161 | 宿舍信息 | 页面 | dormitory |
train/dormitory |
空 |
| 2162 | 课程管理 | 目录 | coursemgr |
— | 空 |
| 2163 | 课程信息 | 页面 | course |
train/course |
空 |
| 2164 | 开班计划 | 页面 | plan |
train/plan |
空 |
| 2165 | 教学成果 | 目录 | result |
— | 空 |
| 2166 | 成绩信息 | 页面 | score |
train/score |
空 |
| 2167 | 自主学习 | 目录 | self |
— | 空 |
| 2168 | 电子设备 | 页面 | equipment |
train/equipment |
空 |
| 2169 | 统计分析 | 目录 | analysis |
— | 空 |
| 2170 | 开班签到 | 页面 | report |
train/report |
空 |
| 2171 | 课程签到 | 页面 | checkin |
train/checkin |
空 |
| 2172 | 学习时长 | 页面 | duration |
train/duration |
空 |
| 2173 | 学员画像 | 页面 | portrait |
train/portrait |
空 |
| 2174 | 电子班牌 | 页面 | board |
train/board |
空 |
| 2175 | 课程成绩 | 页面 | course-score |
train/course-score |
空 |
| 2176 | 学员成绩 | 页面 | student-score |
train/student-score |
空 |
17个 component 对应的 Vue文件在 build_ui/src/views/ 中均存在。因此“菜单记录和页面组件存在”成立。
2. 权限字符串真实状态
public.sys_menu总计106行,其中79行具有权限字符串。- 23条培训目录/页面中,具有权限字符串的行数为0。
- 培训区没有按钮类型
F菜单记录。 - 实时库未找到
train:*、system:teacher:*、system:student:*、system:course:*、system:plan:*、system:info:*、system:report:*、system:auth:*、system:site:*、system:board:*、system:checkin:*、system:duration:*或system:portrait:*培训权限。
因此数据库虽然能生成菜单路由,却不能向普通角色授予 Controller要求的培训操作权限,也不能满足前端按钮权限指令。
3. 与前端 v-hasPermi 的比较
多数生成页面使用:
train:teacher:*
train:student:*
train:course:*
train:plan:*
train:auth:*
train:info:*
train:site:*
train:report:*
train:board:*
train:checkin:*
train:duration:*
train:portrait:*
实时 sys_menu.perms 没有这些字符串。宿舍与成绩当前页面没有 v-hasPermi按钮控制,但这不等于后端允许访问。
结论:普通用户即使获得页面菜单,生成页面的受控按钮也会因权限集合缺失而隐藏。
4. 与 Controller @PreAuthorize 的比较
后端使用 system:* 前缀:
| 资源 | Controller权限 |
|---|---|
| 教师 | system:teacher:* |
| 学员 | system:student:* |
| 课程 | system:course:* |
| 开班计划 | system:plan:* |
| 宿舍权限 | system:auth:* |
| 场地 | system:site:* |
| 报到 | system:report:* |
| 班牌 | system:board:* |
| 签到 | system:checkin:* |
| 学习时长 | system:duration:* |
| 画像 | system:portrait:* |
| 宿舍、教室、成绩 | 共用 system:info:* |
实时 sys_menu 同样没有这些权限。宿舍、教室、成绩共用 system:info:* 还会造成资源授权过宽;它们无法独立控制。
结论:前端、后端、数据库三方权限字符串没有任何一组形成一致闭环。
5. 角色与关系表真实状态
| 项目 | 实际情况 |
|---|---|
public.sys_user |
1个有效应用用户;不输出身份明细 |
public.sys_role |
0行 |
| 培训角色 | 0个 |
public.sys_user_role |
20行;18个用户引用孤儿,20个角色引用全部孤儿 |
public.sys_role_menu |
170行;170个角色引用全部孤儿,9个菜单引用孤儿 |
public.sys_role_dept |
0行 |
应用用户ID 1存在且有效,若依代码通常对管理员提供通配权限;但当前数据库层还存在下述同名表解析问题,不能据此确认管理员登录路径正常。
6. Kingbase同名系统视图对权限体系的影响
Kingbase的 sys_catalog 提供同名 sys_user、sys_role、sys_config 视图,而实际若依表在 public。当前schema搜索顺序把 sys_catalog 放在 public 前。
使用与 Mapper相同的未限定表名进行只读探测时:
sys_user.user_id报字段不存在。sys_role.role_id报字段不存在。sys_config.config_id报字段不存在。
现有 SysUserMapper.xml、SysRoleMapper.xml、SysConfigMapper.xml 都使用未限定表名。这会影响用户加载、角色加载和系统配置查询,是普通角色权限之外的基础运行阻塞项。
7. PRD V1.0菜单对象缺口
实时菜单仍围绕旧14个CRUD和遗留占位页组织,未发现以下PRD V1.0正式业务页面:
- 本期课程/开班课程
- 参训学员关系
- 课次/课程表
- 床位与住宿安排
- 独立门禁授权流程
- 成绩项目与权重
- 培训班工作台
“开班签到”被放在“统计分析”目录下,也不符合PRD V1.0按培训班流程组织页面的建议。以上只记录现状,不在本轮修改菜单。
8. 最终判断
- 培训菜单记录真实存在,component文件也存在。
- 当前无法确认用户能正常登录并看到菜单,因为核心若依表存在schema解析冲突。
- 普通角色权限当前不能正常工作:应用角色为0、关系表有孤儿、培训perms为空、前后端权限字符串不同。
- 没有发现重复培训path/component;主要问题是权限缺失和
system:info:*过宽。