资源管理
功能概述
资源管理(RBAC资源管理)模块用于维护系统中的菜单资源,以树形结构展示菜单层级关系。资源是权限控制的基础,通过资源管理可以定义系统的菜单结构。
WinForm端与Web端功能一致,界面布局略有差异:WinForm端采用树形列表(TreeList),Web端采用可拖拽表头的树形表格。
操作说明
查询资源
- 登录系统后,在菜单中选择 系统管理 → 资源管理
- 在顶部工具栏选择 分组(命名空间),筛选对应模块的资源
- 点击 查询/刷新 按钮刷新列表
分组(命名空间)的来源
资源管理中的"分组"下拉选项来源于 键值对维护 中的数据字典,对应关系如下:
| 数据位置 | 说明 |
|---|---|
| 父级编码 | sys.resource.namespace(系统固定ID) |
| 父级名称 | 系统资源命名空间配置 |
| 子级编码 | 各命名空间的编码 |
| 子级名称 | 命名空间显示名称 |
管理命名空间的步骤:
- 进入 系统管理 → 键值对维护
- 在左侧列表中找到编码为
sys.resource.namespace的父级项 - 在右侧子级列表中添加/编辑/删除命名空间:
- 编码:命名空间唯一标识
- 名称:显示名称
- 排序:显示顺序
- 启用:是否启用
- 点击 保存 提交修改
系统中已使用的命名空间:
| 编码 | 名称 | 使用端 | 说明 |
|---|---|---|---|
TDWEB | Web端菜单 | PC端 | 通过环境变量 VITE_ROUTER_NAMESPACE 配置 |
TDMOB | 移动端菜单 | 移动端 | 通过环境变量 VITE_MOBILE_ROUTER_NAMESPACE 配置 |
DEFAULT | 系统默认命名空间 | 后端 | 代码中的硬编码默认值,用于受限数据等场景 |
提示
如果没有配置任何命名空间,系统会显示默认命名空间 DEFAULT。 资源管理中的分组筛选直接影响对应端的菜单显示,新增菜单资源时需要选择正确的命名空间。
添加同级资源
- 在树形列表中选择一个节点
- 点击 添加同级(WinForm)/ 新增(Web)按钮
- 在弹出的编辑窗口中填写资源信息
- 点击 确定 完成添加
添加子级资源
- 在树形列表中选择父节点
- 点击 添加子级(WinForm)/ 新增子级(Web)按钮
- 在弹出的编辑窗口中填写资源信息
- 点击 确定 完成添加
编辑资源
- 在树形列表中选择要编辑的节点(或双击节点)
- 点击 编辑 按钮
- 修改资源信息
- 点击 确定 完成修改
复制资源
仅WinForm端支持:
- 在树形列表中选择要复制的节点
- 点击 复制 按钮
- 系统自动创建副本(名称后缀"复制")
- 在弹出窗口中修改必要信息后保存
删除资源
- 在树形列表中选择要删除的节点
- 点击 删除 按钮
- 确认删除
注意
如果节点下面存在子节点,需要先删除所有子节点才能删除该节点。
设置角色按钮权限
仅WinForm端支持:
- 在树形列表中选择一个菜单节点
- 点击 设置已有角色按钮权限 按钮
- 为已有角色分配该菜单的按钮权限
树形列表字段说明
| 界面列名 | 绑定字段 | 说明 |
|---|---|---|
| 资源名称 | (计算列) | 显示格式:编码-标题(如 PP1200-部门管理),带图标 |
| 排序 | COrder | 显示顺序 |
| 资源路径 | CResPath | WinForm:模块程序集(DLL文件名);Web:路由名称 |
| 资源子路径 | CResSubPath | WinForm:模块类的完整命名空间路径;Web:Vue组件路径 |
| 注入参数 | CQueryString | URL注入参数 |
| 启用 | CEnable | 是否启用(1=启用,0=禁用) |
| 创建人 | Creator | 资源创建者 |
| 创建时间 | CreateTime | 创建时间 |
| 最后修改人 | LastModifier | 最后修改者 |
| 最后修改时间 | LastModifyTime | 最后修改时间 |
管理功能点
功能点(按钮权限)挂在菜单资源之下,用于控制页面内按钮级别的操作权限。
WinForm端
在树形列表中选择一个菜单节点,点击 子级功能点 按钮,打开"RBAC资源管理(按钮)"窗口。
操作说明:
| 按钮 | 功能 |
|---|---|
| 查询 | 加载当前菜单下的所有功能点 |
| 添加 | 手动新增一行功能点 |
| 删除 | 移除当前选中的功能点行 |
| 自动添加 | 反射加载该菜单对应的窗体程序集,自动扫描窗体上所有按钮控件,将未登记的按钮批量添加到列表 |
| 保存 | 批量提交所有增删改 |
自动添加 是推荐方式:它按资源的 地址(DLL文件名)和 子路径(窗体类名)加载窗体类型,读取界面上所有 SimpleButton 控件,以控件名作为编码、控件文本作为名称生成功能点。
表格字段说明:
| 列名 | 绑定字段 | 说明 |
|---|---|---|
| 编码 | CCode | 按钮控件名,唯一标识(如 btnAdd) |
| 名称 | CName | 按钮显示名称(如"新增") |
| 排序 | COrder | 显示顺序,默认 99 |
| 启用 | CEnable | 1=启用,0=禁用 |
TIP
按钮权限由框架自动处理(ViewControlExecutor_SimpleButton),开发者无需编写权限代码,只要按钮是 SimpleButton 控件即可生效:
- 事件拦截:窗体加载组件时,框架把每个按钮原有的
Click事件处理程序从控件上摘下来,暂存到窗体Tags的simplebuttons.eventhandler字典中,再统一挂上框架自己的拦截处理 - 权限检查:框架调用
HasPermission(窗体, 按钮控件名)检查当前用户权限,即 资源(窗体)+ 功能点编码(按钮 Name 属性) - 隐藏无权按钮:没有权限时直接设置
btn.Visible = false - 统一调度:用户点击按钮时,框架从字典中取出原始事件处理程序依次调用(自动去重,防止重复注册),并记录操作日志(
按钮名.click >>> 方法全名)
权限匹配的关键是 按钮控件的 Name 属性必须与功能点编码一致。这也是推荐使用"自动添加"的原因——它直接扫描控件名生成功能点,保证编码天然匹配。
Web端
在树形列表中选择一个菜单节点,点击 子级功能点 按钮,打开"子级功能点维护"对话框。
操作说明:
| 按钮 | 功能 |
|---|---|
| 加载 | 加载当前菜单下的所有功能点 |
| 新增 | 新增一行功能点(排序自动按行数补零生成,如 01) |
| 删除 | 移除当前选中的功能点行 |
| 保存 | 批量提交所有增删改;若列表中没有编码为 [NULL] 的空节点,会自动补充一个(权限树级联选择的空节点,不要删除) |
表格支持行内编辑,直接点击单元格修改内容。
表格字段说明:
| 列名 | 绑定字段 | 说明 |
|---|---|---|
| 编码 | cCode | 功能点唯一标识(如 btnAdd) |
| 名称 | cTitle | 功能点显示名称 |
| 动作 | cResSubPath | 动作标识 |
| 排序 | cOrder | 显示顺序 |
使用方式:
功能点保存后,前端通过权限指令控制按钮的显示/隐藏:
<t-button v-hp="'btnAdd'">新增</t-button>将 v-hp 指令的值设置为功能点的 编码,用户拥有该功能点权限时按钮才可用。
编辑窗口字段说明
WinForm端
点击 添加同级、添加子级、编辑 或 复制 按钮后,弹出"编辑资源"窗口,包含以下字段:
| 界面标签 | 控件类型 | 绑定字段 | 说明 | 提示信息 |
|---|---|---|---|---|
| 父节点 | 树形下拉选择 | CPid | 父级菜单节点,顶层菜单可不选 | - |
| 图标 | 下拉选择+预览 | CIcon | 菜单图标名称(SVG格式),选择后右侧实时预览图标 | - |
| 编码-名称 | 文本框 | CCode | 资源编码,唯一标识 | 模块代号,两位大写字母+3位数字编码(如 PP1200) |
| (右侧文本框) | 文本框 | CTitle | 菜单显示名称 | ` |
| 地址 | 下拉选择 | CResPath | 模块程序集,从已加载的DLL中自动识别 | 请填dll文件名,内置报表填 rept |
| 子路径 | 下拉选择 | CResSubPath | 模块类的完整命名空间路径 | 请填完整类名,网页填http打头的地址 |
| 是否启用 | 下拉选择 | CEnable | 启用/禁用该菜单 | 1 = 启用,0 = 禁用 |
| 资源类型 | 下拉选择 | CResType | 资源类型,目前支持 Menu(菜单) | - |
| 排序 | 文本框 | COrder | 显示顺序,数字越小越靠前 | - |
| 注入参数 | 文本框 | CQueryString | 在构造函数后注入的参数 | 举例:name=zhaxg&pawd=234 |
操作按钮:
- 确定:保存资源并关闭窗口
- 取消:放弃修改并关闭窗口
Web端
点击 新增、新增子级 或 编辑 按钮后,弹出"资源信息"对话框,包含以下字段:
| 界面标签 | 控件类型 | 绑定字段 | 说明 | 提示信息 |
|---|---|---|---|---|
| ID | 文本框(只读) | id | 资源唯一标识,新增时自动生成 | [自动生成] |
| 父级ID | 文本框(只读) | cPid | 父级菜单的ID | - |
| 资源名称 | 图标选择器+文本框 | cIcon / cCode / cTitle | 左侧选择SVG图标,中间输入编码,右侧输入名称 | 编码格式:三位字母+四位数字(如 TAB1234) |
| 布局类型 | 文本框 | cName | 布局类型,非具体页面路由 | 默认提供 LAYOUT、BLANK、IFRAME 三种类型 |
| 路由名称 | 文本框 | cResPath | 由树结构生成的路由地址 | 只填写当前节点的名称,不带 / 符号 |
| 组件路径 | 文本框 | cResSubPath | Vue组件的路径 | vue文件地址;外部链接填URL;跳转填路由名称+=_blank |
| 注入参数 | 文本框 | cQueryString | URL注入参数 | - |
| 排序 | 文本框 | cOrder | 显示顺序,数字越小越靠前 | - |
| 是否启用 | 下拉选择 | cEnable | 启用/禁用该菜单 | 1 = 启用,0 = 禁用 |
| 资源类型 | 下拉选择(隐藏) | cResType | 资源类型,固定为菜单 | 固定值:2(菜单) |
操作按钮:
- 确定:保存资源并关闭对话框
- 取消:放弃修改并关闭对话框