『贴代码』
PasteSpider
PasteForm
精选作品
优选问答
成长笔记
【本期话题】更多
                                    我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
                    
PasteForm中的绑定功能实现详解 —— 以角色绑定权限为例
念之森蓝 2026-03-19 44 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 44 0
快捷注册
用户问答更多
PasteForm,神奇了啊!都说低代码,低代码,那个是对于非开发者来说的,感觉PasteForm就是开发者的低代码啊!只要配置好Model,就有对应的CRUD操作,还带一些逻辑,和生成代码是两码事了!!!问题来了,有什么局限性,或者适用哪些场景?
07月份版本的内存占用比以前大了,也没有泄漏,啥情况?以前200MB,这个版本能到300MB
  • 应该和之前的PasteForm引入有关,之前的版本引入了大量的API,看看10月份或者11月份的版本,新版本的PasteForm极大的优化了API接口量,可以说直接从4N优化到了N个(N代表数据表数量)

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

最新动态
  • 116.****.11 正在查看 PasteForm字段的属性一览(持续升级) !
  • 190.****.72 正在查看 使用PasteSpider部署CoreShop商城 !
  • 49.****.111 正在查看 PasteForm框架介绍,PasteForm为啥说是敏佳开发天花板,看这篇就够了 !
  • 42.****.26 正在查看 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-效果展示(4) !
  • 159.****.211 正在查看 PasteSpider的V5正式版发布啦!(202504月版),更新说明一览 !
  • 116.****.248 正在查看 2025年10月份升级内容 !
  • 119.****.109 正在查看 PasteSpider部署工具介绍,为啥说是开发专属部署工具,看这篇就够了! !
  • 82.****.211 正在查看 PasteTemplate和PasteBuilder的使用教程 !
  • 119.****.70 正在查看 文章列表页 !
  • 185.****.6 正在查看 文章列表页 !
  • 112.****.52 正在查看 主页pastespider !
欢迎加入QQ讨论群 296245685 [PasteSpider]介绍 [PasteForm]介绍 @2022-2023 PasteCode.cn 版权所有 ICP证 闽ICP备2021013869号-2