Tech Blog

Sharing .NET, Blazor, and full-stack development insights

11 articles Filtering by: blazor admin
Original 2026-10-01 670

EasyAdminBlazor 审批模块实战:从提交、审批到最终完成

EasyAdminBlazor审批模块采用“状态机+审批记录表”方案,专注固定 2~3 级串联审批。五步接入:装包注册流程、实体换基类、页面加审批选项卡、配审批人(支持部门/角色/指定人/表单字段)、跑通提交与审批。审批记录表同时承载流水、待办索引与通知目标,一张表加两个索引支撑全部查询。

Read More
Original 2026-09-29 716

EasyAdminBlazor 多租户源码解析:为什么采用独立数据库隔离?

EasyAdminBlazor的多租户实现采用独立数据库隔离,而非 TenantId 行级方案。核心链路四步走:按请求 Host 在主库 SysTenant 表匹配租户,每请求只解析一次;AdminContext.Orm 根据解析结果返回主库或租户库的 FreeSql 实例;数据库物理隔离,文件按租户编码分目录,缓存加租户前缀;租户编码必须过白名单正则,防止路径穿越与注入。独立库的代价是新租户建表必须自动化,这正是 AutoSyncStructure 的用武之地。

Read More
Original 2026-09-28 898

EasyAdminBlazor 文件上传源码解析:从浏览器到服务器到底发生了什么?

这篇文章详解了 EasyAdminBlazor 中文件上传的完整链路:从组件选文件、FileService 的六道校验(扩展名白名单/黑名单、大小、Magic Number、路径规范化、重名处理、落盘),到 ImageSharp 图片解码校验与 WebP 转换,再到 SysFile 落库、私有文件五步授权下载和删除时的路径安全校验,最后给出配置项、测试覆盖与常见问题速查。

Read More
Original 2026-09-27 853

EasyAdminBlazor 数据权限源码解析:为什么查询、新增、修改、删除都必须控制?

本文详解ApplyDataPermission的实现机制:通过IDataPermission与IEntityCreated接口自动识别需防护的实体,基于角色数据权限类型(如本部门、仅本人等)动态生成SQL过滤条件。强调数据权限必须覆盖查询、新增、修改、删除及导入全路径,尤其指出导入Excel时易被忽视的越权漏洞——通过在导入时校验数据权限,确保仅允许用户操作其有权限的数据,实现“全链路防护”。

Read More
Original 2026-09-26 870

EasyAdminBlazor 权限系统源码解析:菜单、按钮、API 是如何完成授权的?

本文深入解析 EasyAdminBlazor 2.3 中权限校验的源码实现,揭示路由拦截、按钮显隐与服务端校验的底层逻辑。基于 RBAC 模型,通过用户-角色-菜单三层关联,统一管理页面与按钮权限。系统在登录后加载权限至内存并缓存30分钟,结合权限版本号实现缓存即时失效。路由级授权通过 AuthPath 方法判断路径是否合法,自动补全父菜单以保证导航完整性,确保“能进页面”与“能点按钮”均精准可控。

Read More
Original 2026-09-25 809

EasyAdminBlazor 表单开发实战:从简单 CRUD 到复杂业务表单

本文介绍 EasyAdminBlazor 的表单设计:不定义 EditTemplate 时,直接走 BootstrapBlazor 的自动表单生成;定义后则完全用自定义模板覆盖。文章讲解了弹窗底部按钮装配、EditContextCapture 校验机制、变更类型判定、保存不关闭等细节,并给出从简单表单到标签页分组、条件显示、大表单拆组件的实践方式,最后总结各关注点的职责划分。

Read More
Original 2026-09-23 777

Blazor Admin 高级查询实战:条件筛选、动态查询与关联数据

本文详解 AdminTable 查询条件的实现机制:从搜索框、列头筛选、高级搜索到自定义查询,四类入口数据分别收集至 QueryPageOptions 的不同字段。通过 ToDynamicFilter 方法统一翻译为 DynamicFilterInfo,其中模糊搜索用“或”逻辑,其余为“与”关系。操作符自动映射,支持 [Flags] 枚举的位运算筛选,并通过 IgnoreSearchColumns 避免导航属性误用。排序优先级明确,不覆盖原始 OrderBy,确保查询逻辑清晰可靠。

Read More