编辑 | blame | 历史 | 原始文档

临抢修系统权限与三员设计

确认日期:2026-09-20
参考项目:D:\rxkj\zonghepingtai
当前阶段:先完成业务功能和页面,不启用真实权限控制。

1. 第一阶段口径

  • 第一阶段所有登录用户统一使用 admin 系统管理员账号,先跑通功能。
  • 第一阶段暂不启用用户、角色、租户的访问拦截。
  • 第一阶段不因当前用户角色或租户不同而隐藏业务菜单、按钮或数据。
  • 后端仍保留清晰的权限扩展点,但第一阶段不放置会阻断业务流程的授权注解和路由守卫。
  • 系统管理中的“角色管理”“菜单管理”“菜单权限管理”页面先行提供,配置数据可用于后续启用权限控制。
  • 菜单仍采用数据库动态配置,不在前端写死完整菜单树。
  • 后续正式权限模型中,菜单必须同时满足“租户已授权”和“用户角色已授权”两个条件后才能使用。
  • “三员控制”纳入后续安全设计,第一阶段由 admin 临时承担全部职责,不能把第一阶段的单账号方式直接视为正式生产权限方案。

2. 系统管理菜单

系统管理一级菜单下共 6 个子菜单:

序号 子菜单 第一阶段 说明
1 承修单位管理 实现 名称、简称、单位性质、排序、联系人、是否失信单位
2 产品结构树管理 实现 型号 -> X号 -> 一级系统 -> 二级系统 -> 设备,共 5 级
3 设备基础库管理 实现 一级系统 -> 二级系统 -> 设备,共 3 级;产品结构树设备关联设备基础库设备类
4 角色管理 页面和基础数据实现,暂不拦截 角色名称、角色编码、排序、备注;预留角色菜单授权和角色人员维护
5 菜单管理 实现 树形维护菜单、路由、类型、图标、排序、显示状态和权限标识
6 菜单权限管理 页面和授权数据实现,暂不拦截 预留“租户授权 + 角色授权”双重勾选规则

2.1 角色管理

建议字段:

  • 角色名称
  • 角色编码
  • 角色类型
  • 排序
  • 备注
  • 状态
  • 创建人、创建时间、修改人、修改时间

建议操作:

  • 查询、刷新、新增、修改、删除
  • 配置菜单权限
  • 维护角色人员

第一阶段不根据角色限制功能访问,仅保存角色和角色菜单关系,便于后续启用。

2.2 菜单管理

菜单采用树形结构,主要字段:

  • 上级菜单 PID
  • 菜单名称 NAME
  • 菜单类型 TYPE:菜单、按钮、系统、页面等,最终取值以设计为准
  • 路由地址 URL
  • 菜单参数 PARAMS
  • 图标 ICON
  • 权限标识 PERMISSIONS
  • 排序 SORT
  • 是否显示 SHOW_MENU
  • 是否刷新 IS_REFRESH
  • 描述 REMARK
  • 功能说明 REMARK2
  • 删除标记和审计字段

菜单维护要求:

  • 新增、修改、删除后刷新菜单缓存。
  • 删除父菜单前先校验是否存在子菜单。
  • 删除菜单时同步清理角色菜单关系。
  • 前端登录后从后端获取当前用户可以使用的菜单树,并动态生成路由。
  • 第一阶段由后端返回 admin 可见的全部已配置菜单。
  • 后续启用权限后,菜单变更应在刷新菜单或重新登录后生效。

2.3 菜单权限管理

最终规则:

  1. 先选择租户。
  2. 再选择角色。
  3. 对该租户和该角色分别勾选菜单。
  4. 同一菜单必须同时出现在租户授权和角色授权中,用户才能访问。
  5. 页面入口和按钮权限使用同一套规则。
  6. 用户拥有多个角色时,角色菜单先取并集,再与租户菜单取交集。

等价逻辑:

用户可用菜单 = 租户已授权菜单 ∩(用户所有有效角色已授权菜单的并集)

第一阶段:

  • 页面、表结构和保存关系可以先行实现。
  • 查询菜单导航时不应用租户或角色过滤。
  • admin 可使用全部菜单。
  • 后续启用时再打开上述交集过滤。

3. 动态菜单与路由

参考项目做法:

  • 前端登录后调用 /sys/menu/nav 获取菜单树。
  • 前端递归处理菜单,根据 URL 加载页面组件。
  • 通过 Vue Router 的 addRoutes 动态添加路由。
  • 菜单通过 PID 组成树,通过 SORT 排序。
  • 菜单新增、修改、删除、角色菜单授权、租户菜单授权后清理权限缓存。

本项目沿用同一思路,但不机械复制参考项目的租户、公司和角色结构。第一阶段先保证:

  • 菜单由数据库配置。
  • 页面路由由菜单配置驱动。
  • 新增业务页面时不需要改动完整前端菜单树。
  • 后续启用租户和角色过滤时,只替换导航查询规则,不重写前端菜单渲染逻辑。

4. 预留逻辑表

以下为本项目 LX 模式下建议的逻辑对象;实际表名、字段名在 DM8 中统一使用大写,并在建表前按现有数据库规范复核:

逻辑表 用途 关键字段
LX.SYS_MENU 动态菜单 ID、PID、NAME、TYPE、URL、PARAMS、ICON、PERMISSIONS、SORT、SHOW_MENU、IS_REFRESH、REMARK、REMARK2
LX.SYS_ROLE 角色 ID、NAME、CODE、TYPE、SORT、REMARK、STATUS
LX.SYS_ROLE_MENU 角色菜单关系 ROLE_ID、MENU_ID
LX.SYS_USER_ROLE 用户角色关系 USER_ID、ROLE_ID
LX.SYS_TENANT_MENU 租户菜单关系 TENANT_ID、MENU_ID
登录日志 三员审计基础 用户、时间、IP、结果、浏览器信息
操作日志 三员审计基础 用户、菜单、动作、请求、结果、时间、IP

说明:

  • 本项目的租户定义尚未确认,TENANT_ID 的取值来源需要结合 SYS_DEPT、SYS_USER 和实际组织机构规则另行确认。
  • 第一阶段表结构可以先建立,但不启用过滤逻辑。
  • 后续如果确定不需要多租户数据隔离,只保留菜单的双授权规则,也仍需明确“租户维度”的实际业务含义。

5. 三员控制

“三员控制”暂按常见的信息系统三员分立理解为:

  1. 系统管理员
  2. 安全保密管理员
  3. 安全审计员

第一阶段不启用三员分权,统一由 admin 跑通功能。后续正式启用时,建议按以下职责分离:

角色 主要职责 禁止或限制
系统管理员 用户、角色、菜单、参数、设备基础数据、系统运维 不得删除或篡改安全审计日志;不得单人同时拥有审计员全部权限
安全保密管理员 安全策略、敏感词字典、数据密级或敏感标记、授权规则 不得删除审计日志;不得随意修改自身权限
安全审计员 查看登录日志、操作日志、安全事件和审计报表 不得修改业务数据、角色菜单和安全策略;审计记录只读

三员分权原则:

  • 三员应使用不同账号,不能共用一个账号。
  • 系统管理员和安全审计员的权限不能合并给同一账号。
  • 重要配置、授权和删除操作必须写入操作日志。
  • 审计日志只能追加和查询,不能通过普通业务页面修改或删除。
  • 审计员的操作本身也要留痕。
  • 三员的具体岗位边界、是否允许兼任、是否需要双人审批,待后续安全方案确认。

6. 参考项目对应位置

参考项目主要实现位置:

  • 后端菜单模型:zt/core/src/main/java/com/zt/modules/sys/model/SysMenu.java
  • 后端角色模型:zt/core/src/main/java/com/zt/modules/sys/model/SysRole.java
  • 后端角色菜单模型:zt/core/src/main/java/com/zt/modules/sys/model/SysRoleMenu.java
  • 后端菜单控制器:zt/core/src/main/java/com/zt/modules/sys/controller/SysMenuController.java
  • 后端角色控制器:zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java
  • 后端租户控制器:zt/core/src/main/java/com/zt/modules/sys/controller/SysTenantController.java
  • 菜单 SQL:zt/core/src/main/resources/mapper/dm/sys/SysMenuDao.xml
  • 角色菜单 SQL:zt/core/src/main/resources/mapper/dm/sys/SysRoleMenuDao.xml
  • 前端动态路由:web/src/router/router.js
  • 角色管理页面:web/packages/views/modules/sys/role.vue
  • 角色编辑页面:web/packages/views/modules/sys/role-add-or-update.vue
  • 角色菜单授权页面:web/packages/views/modules/sys/role-menu.vue
  • 菜单管理页面:web/packages/views/modules/sys/menu.vue
  • 菜单编辑页面:web/packages/views/modules/sys/menu-add-or-update.vue
  • 租户菜单授权页面:web/packages/views/modules/sys/tenant-menu.vue

本项目只参考其动态菜单、树形配置、角色菜单关系和缓存刷新思路,不直接复制其公司、租户、安全框架和业务耦合代码。

7. 当前结论与待确认

已确认:

  • 第一阶段不做角色控制,所有用户使用 admin。
  • 先完成业务页面和动态菜单。
  • 系统管理增加角色管理、菜单管理、菜单权限管理。
  • 菜单权限的最终规则是租户和角色都勾选后才能使用。
  • 后续增加三员控制。

待确认:

  • 本项目“租户”的实际定义及与 SYS_DEPT、SYS_USER 的关系。
  • 角色类型和预置角色的最终编码。
  • 菜单类型、按钮权限标识和菜单字段的最终清单。
  • 三员的具体职责边界、是否允许兼任、是否需要双人审批。
  • 首次启用权限控制时,admin 是否保留超级管理员绕过规则。