Tech Blog

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

26 articles
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
Original 2026-09-22 938

AdminTable 源码解析:EasyAdminBlazor 如何实现通用 CRUD?

EasyAdminBlazor 2.3.0 的 AdminTable 继承 BootstrapBlazor 的 Table<TItem>,通过 IAggregateRootRepository<TItem> 把查询接到 FreeSql。它做了四件事:查询接入(GetSelect + GetPagedAsync)、筛选排序翻译(ToDynamicFilter + ApplyOrder)、写路径服务端权限与数据权限校验(AuthButton + FilterAuthorizedAsync)、补齐导入导出/打印/草稿等后台刚需。核心价值是把重复的 CRUD 变成组件能力,一个实体加一个页面就是一个模块。

Read More
Original 2026-09-22 726

为什么 EasyAdminBlazor 不需要传统 Controller + Service + DTO?

EasyAdminBlazor 2.3.0 不需要 Controller + DTO,是因为 Blazor Server 组件在服务端执行,没有 HTTP 边界,这两层"协议层"的职责消失。CRUD 编排由 AdminTable 内置,业务规则仍应抽成可注入的领域服务。需要前后端分离、第三方对接、开放 API 时,仍应写接口层,实体与仓储可复用。

Read More
Original 2026-09-22 651

EasyAdminBlazor 2.3 源码架构解析:Blazor Admin 请求到底是怎么跑起来的?

EasyAdminBlazor 2.3.0 基于 .NET 10 + Blazor Server,采用"主包依赖接口、扩展替换实现"的可插拔架构。启动期构建 FreeSql 主库并注册基础设施,请求期经认证中间件、MainLayout 初始化、AdminTable 查询数据。核心:接口驱动、AdminContext 为中枢、针对 Blazor Server Circuit 特性处理 HttpContext 不可用与租户缓存问题。

Read More