记录当前Git开发基线、Kingbase真实表结构、培训数据与权限状态。 补充数据库与代码差异、只读兼容性验证及PRD V1.0核心对象映射,未包含业务代码或数据库修改。
137 lines
6.2 KiB
Markdown
137 lines
6.2 KiB
Markdown
# 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` 的比较
|
|
|
|
多数生成页面使用:
|
|
|
|
```text
|
|
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. 最终判断
|
|
|
|
1. 培训菜单记录真实存在,component文件也存在。
|
|
2. 当前无法确认用户能正常登录并看到菜单,因为核心若依表存在schema解析冲突。
|
|
3. 普通角色权限当前不能正常工作:应用角色为0、关系表有孤儿、培训perms为空、前后端权限字符串不同。
|
|
4. 没有发现重复培训path/component;主要问题是权限缺失和 `system:info:*` 过宽。
|