Skip to content

角色管理 ​

功能概述 ​

角色管理模块用于维护系统角色信息,支持角色的增删改查,以及菜单与功能权限、数据项权限(行级)、数据列权限(列级)的分配,和角色用户的管理。

角色是 RBAC(基于角色的访问控制)的核心,权限通过角色间接分配给用户。

操作说明 ​

查询角色 ​

  1. 登录系统后,在菜单中选择 系统管理 → 角色管理
  2. 在顶部输入关键字,点击 查询 按钮筛选角色

添加角色 ​

  1. 点击工具栏的 添加 按钮
  2. 在表格中直接编辑新行:填写角色名称和描述
  3. 新角色的默认值:角色ID自动生成、创建人自动填入当前用户、状态为正常(1)
  4. 点击 保存 提交

编辑角色 ​

直接在表格中双击要编辑的行进行编辑,修改完成后点击 保存。

提示

保存时系统会校验角色名称是否重复,重复则无法保存。

删除角色 ​

  1. 在表格中选择要删除的角色
  2. 点击 删除 按钮
  3. 系统会先调用 CheckBeforeRemoveRole 检查该角色是否有关联数据,有关联则需先解除

编辑角色用户 ​

  1. 在表格中选择一个角色
  2. 点击 编辑用户 按钮
  3. 在弹出的窗口中通过 双击数据行 在左右列表之间移动用户
  4. 点击 确定 保存

列表字段说明 ​

界面列名绑定字段可编辑说明
角色名称CRoleName是角色显示名称,保存时校验唯一性
角色描述CDescription是角色功能描述
创建人Creator否角色创建者
创建时间CreateTime否创建时间
最后修改人LastModifier否最后修改者
最后修改时间LastModifyTime否最后修改时间
状态CState否1=正常,0=禁用,2=变更

工具栏按钮说明 ​

按钮说明
查询按关键字筛选角色列表
添加在表格中新增一行角色
删除删除选中的角色(需先解除关联数据)
保存提交所有增删改操作
编辑用户管理该角色下的用户分配
菜单与功能权限分配菜单和按钮功能点权限
数据项权限分配行级数据访问权限
数据列权限分配列级数据可见权限

菜单与功能权限 ​

设计逻辑 ​

菜单与功能权限控制的是用户能看到哪些菜单、能执行哪些按钮操作。权限数据存储在资源(HmxRes)和角色资源关联表中,通过树形复选框方式管理。

系统加载用户菜单时,根据用户拥有的角色查询已授权的资源列表,过滤出用户可访问的菜单树;框架加载窗体组件时,根据角色授权的功能点自动隐藏没有权限的按钮。

操作说明 ​

  1. 在角色列表中选择一个角色,点击 菜单与功能权限 按钮
  2. 弹出 角色[角色名]的菜单与功能权限编辑 窗口
  3. 顶部 分组 下拉选择命名空间(如 TDWEB、TDMOB),筛选对应端的菜单
  4. 树形列表展示所有菜单和功能点,每个节点带复选框

复选框状态:

状态含义
☑️ 已勾选该资源已授权给当前角色
⬜ 未勾选该资源未授权
➖ 半选(Indeterminate)子节点部分勾选

操作方式:

  • 勾选父节点会 级联勾选 所有子节点
  • 取消勾选父节点会 级联取消 所有子节点
  • 已勾选的节点会自动展开其父节点
  • 点击 确定 保存当前分组的权限配置

注意

切换分组(命名空间)时,权限树会重新加载。每个分组的权限需要 分别保存。

菜单节点 vs 功能点节点 ​

类型图标说明
菜单(Menu)菜单对应图标(由 CIcon 决定)控制用户能否在导航栏看到并进入该页面
功能点(Widget)按钮图标控制用户能否执行页面内的具体操作(如新增、删除)

功能点挂在菜单下面,勾选菜单只代表能访问页面,还需要勾选具体的功能点才能操作对应的按钮。

权限生效原理 ​

WinForm 端: 框架通过 ViewControlExecutor_SimpleButton 自动处理——窗体加载时检查 HasPermission(窗体, 按钮Name) ,没有权限则设置 btn.Visible = false。

Web 端: 前端通过 v-hp="'功能点编码'" 权限指令控制按钮的显示/隐藏。


数据项权限(行级) ​

设计逻辑 ​

数据项权限控制的是用户能看到哪些数据行。例如:某角色只能看到"华东区"的订单,或只能看到"本部门"的员工。

权限数据存储在受限数据资源表和角色数据项关联表中。数据资源定义了"对哪张表的哪些行做权限控制",角色数据项关联表记录了"某个角色可以访问该表中的哪些行"。

系统查询数据时,框架会根据当前用户的角色自动追加 WHERE 条件,过滤出用户有权访问的数据行。

界面布局 ​

窗口标题:RBAC角色资源权限管理(数据项)

区域说明
左侧面板受限数据资源列表(已注册的数据表)
右侧面板当前角色拥有的数据项(勾选框列表)
工具栏查询、添加、删除

受限数据资源列表字段:

列名说明
受限数据资源编码(对应数据库表名)
受限数据名称资源显示名称
主键列该表的主键字段名
名称列该表的显示名称字段

右侧数据项字段:

列名说明
选择勾选框,勾选表示该角色可以访问此数据行
编码数据行的主键值
描述数据行的显示名称

操作说明 ​

  1. 在角色列表中选择一个角色,点击 数据项权限 按钮
  2. 左侧面板显示已注册的受限数据资源
  3. 点击某个受限数据资源,右侧面板加载该资源下所有数据行
  4. 勾选 需要授权的数据行(勾选即保存,实时生效)
  5. 取消勾选 即收回该数据行的访问权限

添加受限数据资源 ​

  1. 点击 添加 按钮,弹出受限数据资源编辑窗口
  2. 填写以下字段:
界面标签说明
搜索关键字输入关键词搜索数据库中的表
表从搜索结果中选择要控制的表
资源名称该受限数据资源的显示名称
主键列选择该表的主键字段(用于标识每一行)
名称列选择该表的显示名称字段(用于展示数据行)
点击 确定完成添加
  1. 添加后,该表会出现在左侧列表中,可以为其分配角色数据项权限

删除受限数据资源 ​

  1. 在左侧列表中选择要删除的受限数据资源
  2. 点击 删除 按钮
  3. 如果该资源已经分配了权限,系统会提示确认——删除后相关角色的行级权限将失效

注意

删除受限数据资源会同时删除所有角色对该资源的权限分配,请谨慎操作。

权限生效原理 ​

系统查询数据时,RestrictDataAppService 根据用户角色查询已授权的数据项,自动在查询语句中追加 WHERE 主键 IN (已授权列表) 条件。如果用户没有任何角色或角色未分配数据项权限,则无法看到该资源下的数据。


数据列权限(列级) ​

设计逻辑 ​

数据列权限控制的是用户能看到哪些数据列。例如:某角色看不到"薪资"列,或看不到"身份证号"列。

权限数据存储在资源表(HmxRes,类型为 DataColumn)和角色数据列关联表中。每个数据列权限对应一个实体类,勾选的属性名即为用户可读写的列。

系统加载表格时,框架根据角色授权的列权限自动隐藏未授权的列。

界面布局 ​

窗口标题:当前角色[角色名]可读写列:

区域说明
左侧面板数据列权限资源列表(已注册的实体类)
右侧面板该实体类的所有属性列表(复选框)
工具栏查询、添加、删除、保存

左侧资源列表字段:

列名绑定字段说明
资源编码CCode实体类的完整命名空间路径(如 Hmx.Service.Admin.Entities.HmxUser)
标题CTitle实体类名称 + Description 特性描述
启用CEnable是否启用

右侧属性列表字段:

列名说明
☑️ 复选框勾选表示该角色可以读写此列
属性名实体类的属性名 + Description 特性描述

操作说明 ​

  1. 在角色列表中选择一个角色,点击 数据列权限 按钮
  2. 左侧面板自动加载所有已注册的实体类(通过 ITypeFinder 扫描 IHmxEntity 的实现类)
  3. 点击某个实体类,右侧面板通过 反射 读取该实体类的所有公开属性,显示为复选框列表
  4. 已授权的列自动勾选
  5. 勾选或取消勾选 即时生效(CellValueChanged / ItemCheck 事件实时保存)

添加数据列权限资源 ​

  1. 点击 添加 按钮
  2. 在新增行中填写:
    • 资源编码(CCode):实体类的完整命名空间路径(如 Hmx.Service.Admin.Entities.HmxUser)
    • 标题(CTitle):显示名称
  3. 点击 保存 提交

删除数据列权限资源 ​

  1. 在左侧列表中选择要删除的资源
  2. 点击 删除 按钮
  3. 如果该资源已分配了列权限,系统会提示确认——删除后相关角色的列级权限将失效

注意

保存时系统会校验资源编码是否重复,重复则无法保存。删除资源会同时删除所有角色对该资源的列级权限。

权限生效原理 ​

系统加载表格时,RestrictDataAppService 根据用户角色查询已授权的列名列表,框架自动隐藏未在授权列表中的列。未被勾选的列对用户不可见,但数据仍然存在于后端,只是界面上不展示。


三级权限的关系 ​

用户
 └── 角色(可多个)
      ├── 菜单与功能权限 → 控制 能访问哪些页面、能执行哪些按钮
      ├── 数据项权限     → 控制 能看到哪些数据行
      └── 数据列权限     → 控制 能看到哪些数据列

三种权限相互独立、可以任意组合。例如:某角色可以访问"订单管理"页面(菜单权限),但只能看到"华东区"的订单(数据项权限),且看不到"成本价"列(数据列权限)。

HiMind 工业互联网平台 技术文档