『贴代码』
PasteSpider
PasteForm
精选作品
优选问答
成长笔记
【本期话题】更多
                                    我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
                    
PasteForm中的绑定功能实现详解 —— 以角色绑定权限为例
念之森蓝 2026-03-19 1 0 0
在开发后台管理系统时,经常会遇到多对多关系的绑定操作,比如角色与权限的绑定、用户与角色的绑定等。PasteForm提供了一套优雅的解决方案,让我们能够快速实现这类功能。本文将以角色绑定权限为例,详细介绍整个实现流程。

更多特性PasteForm的介绍,请前往PasteForm操作文档查看 PasteForm操作文档与介绍


前言

在开发后台管理系统时,经常会遇到多对多关系的绑定操作,比如角色与权限的绑定、用户与角色的绑定等。PasteForm提供了一套优雅的解决方案,让我们能够快速实现这类功能。本文将以角色绑定权限为例,详细介绍整个实现流程。

数据表结构

首先,我们需要三个基础表:

  • RoleInfo(权限信息表):存储系统中的所有权限
  • GradeInfo(角色信息表):存储系统中的所有角色
  • GradeRole(角色权限关联表):存储角色与权限的对应关系

实现步骤

第一步:在角色列表中添加绑定入口

GradeInfoListDto 中添加一个菜单字段,用于触发绑定操作:

/// <summary>
/// 权限绑定入口
/// </summary>
[PasteMenu("绑定权限", "open_window('绑定权限','pasteform/index.html?path=roleInfo&model=bind&grade_id={{:=item.id}}','80%','80%')")]
[Description("权限绑定")]
public int Menu1 { get; } = 0;

这里的 open_window 函数会打开一个新窗口,URL中携带了当前角色的ID(grade_id),用于后续查询。

第二步:配置查询参数

InputQueryRoleInfo 中添加接收角色ID的字段:

/// <summary>
/// 角色ID - 用于查询指定角色已拥有的权限
/// </summary>
[PasteQuery("grade_id", true)]
[PasteHidden] // 默认隐藏,仅用于查询传递
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("角色ID")]
public int GradeId { get; set; }

关键属性说明:

  • PasteQuery:标记该字段为查询参数
  • PasteHidden:在界面中隐藏该字段
  • PasteExtendBind:配置扩展绑定的关联关系

第三步:配置绑定状态字段

RoleInfoListDto 中添加绑定状态字段:

/// <summary>
/// 扩展绑定 - 标记该权限是否已被当前角色拥有
/// </summary>
[PasteSwitch("bind")]
[PasteHidden("bind")]
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("是否已绑定")]
public bool ExtendBind { get; set; }

PasteSwitch 属性会在界面上生成一个开关控件,用户可以通过它来切换绑定状态。

工作原理

1. 数据加载流程

  1. 用户在角色列表中点击某角色的”绑定权限”按钮
  2. 系统打开权限列表页面,并在URL中携带 grade_id 参数
  3. InputQueryRoleInfo 中的 GradeId 字段接收到该参数
  4. 权限列表查询时,根据 grade_idGradeRole 表中查找该角色已拥有的权限
  5. ExtendBind 字段会自动根据查询结果设置为 true(已绑定)或 false(未绑定)

2. 交互流程

  • 权限列表以表格形式展示,每条记录都有一个开关控件
  • 用户可以通过开关来为角色绑定或解绑权限
  • 开关状态的变化会自动记录操作结果

3. 数据提交

DefaultAppService 中的 updateState 方法会自动处理绑定状态的变更:

  • 当开关从 false 变为 true 时,向 GradeRole 表插入一条关联记录
  • 当开关从 true 变为 false 时,从 GradeRole 表中删除对应的关联记录

完整示例代码

GradeInfoListDto(角色列表DTO)

public class GradeInfoListDto
{
    public int Id { get; set; }

    public string GradeName { get; set; }

    /// <summary>
    /// 权限绑定入口
    /// </summary>
    [PasteMenu("绑定权限", "open_window('绑定权限','pasteform/index.html?path=roleInfo&model=bind&grade_id={{:=item.id}}','80%','80%')")]
    [Description("权限绑定")]
    public int Menu1 { get; } = 0;
}

InputQueryRoleInfo(权限查询DTO)

public class InputQueryRoleInfo
{
    /// <summary>
    /// 角色ID - 用于查询角色已拥有的权限
    /// </summary>
    [PasteQuery("grade_id", true)]
    [PasteHidden]
    [PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
    [Description("角色ID")]
    public int GradeId { get; set; }
}

RoleInfoListDto(权限列表DTO)

public class RoleInfoListDto
{
    public int Id { get; set; }

    public string RoleName { get; set; }

    public string PermissionCode { get; set; }

    /// <summary>
    /// 扩展绑定 - 当前角色是否拥有此权限
    /// </summary>
    [PasteSwitch("bind")]
    [PasteHidden("bind")]
    [PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
    [Description("是否已绑定")]
    public bool ExtendBind { get; set; }
}

总结

通过PasteForm的扩展绑定功能,我们只需要简单的几步配置,就能实现复杂的多对多关系绑定操作。这种方式不仅代码量少,而且功能完善,大大提高了开发效率。其核心优势在于:

  1. 配置简单:通过几个特性标签就能完成配置
  2. 功能完整:自动处理数据查询、状态展示、变更提交
  3. 体验良好:提供直观的开关控件进行绑定操作
  4. 扩展性强:支持任意多对多关系的绑定
评论列表
念之森蓝
0 1 0
快捷注册
用户问答更多
PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
07月份版本的内存占用比以前大了,也没有泄漏,啥情况?以前200MB,这个版本能到300MB
  • 应该和之前的PasteForm引入有关,之前的版本引入了大量的API,看看10月份或者11月份的版本,新版本的PasteForm极大的优化了API接口量,可以说直接从4N优化到了N个(N代表数据表数量)

文档中的组织归属有些问题,啥时候看看,更新更新!
  • 已经升级了,主要是left join的查询的时候没有过滤,其实这个问题,多租户也是一样的!

最新动态
  • 59.****.47 正在查看 主页pasteform !
  • 59.****.47 正在查看 主页pastespider !
  • 59.****.164 正在查看 主页pastespider !
  • 59.****.164 正在查看 主页talk !
  • 59.****.47 正在查看 主页pastespider !
  • 59.****.164 正在查看 主页pastespider !
  • 59.****.164 正在查看 CRUD的最佳实践,联动前后端,包含微信小程序,API,HTML等(二) !
  • 59.****.164 正在查看 主页pastespider !
  • 59.****.164 正在查看 PasteForm中如何处理批量操作? !
  • 59.****.164 正在查看 【贴代码笔记】如何玩转贴代码笔记,一起来看看为啥说贴代码笔记才是你充电的登山镐! !
  • 59.****.47 正在查看 主页pastespider !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2