我们在开发中经常遇到对方的接口请求有频率限制,比如当前接口每秒的请求不能大于100,不能大于1000,对于这样的,我们作为请求方,如何做限定?
在开发后台管理系统时,经常会遇到多对多关系的绑定操作,比如角色与权限的绑定、用户与角色的绑定等。PasteForm提供了一套优雅的解决方案,让我们能够快速实现这类功能。本文将以角色绑定权限为例,详细介绍整个实现流程。
首先,我们需要三个基础表:
在 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 属性会在界面上生成一个开关控件,用户可以通过它来切换绑定状态。
grade_id 参数InputQueryRoleInfo 中的 GradeId 字段接收到该参数grade_id 到 GradeRole 表中查找该角色已拥有的权限ExtendBind 字段会自动根据查询结果设置为 true(已绑定)或 false(未绑定)DefaultAppService 中的 updateState 方法会自动处理绑定状态的变更:
false 变为 true 时,向 GradeRole 表插入一条关联记录true 变为 false 时,从 GradeRole 表中删除对应的关联记录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;
}
public class InputQueryRoleInfo
{
/// <summary>
/// 角色ID - 用于查询角色已拥有的权限
/// </summary>
[PasteQuery("grade_id", true)]
[PasteHidden]
[PasteExtendBind("GradeRole", "RoleId", "GradeId", "grade_id")]
[Description("角色ID")]
public int GradeId { get; set; }
}
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的扩展绑定功能,我们只需要简单的几步配置,就能实现复杂的多对多关系绑定操作。这种方式不仅代码量少,而且功能完善,大大提高了开发效率。其核心优势在于:
念之森蓝
应该和之前的PasteForm引入有关,之前的版本引入了大量的API,看看10月份或者11月份的版本,新版本的PasteForm极大的优化了API接口量,可以说直接从4N优化到了N个(N代表数据表数量)
已经升级了,主要是left join的查询的时候没有过滤,其实这个问题,多租户也是一样的!