更新日志

📝 [v2.3.1] - 2026.09.19

🐛 问题修复

  • 文件上传不再被误挡成 401:移除 FileUploadController 上叠加的 [Authorize]。框架的登录态是自定义加密 Cookie,并非 ASP.NET Core 标准认证方案;叠加该特性会让请求在进入控制器之前按"默认认证方案"校验,宿主项目若把自己面向站点用户的 Cookie 设为默认方案,后台管理员上传时会被直接挡成 401,而控制器内的 IsLogin() 判断根本没有机会执行。现统一由 IsLogin() 判定并返回 401。
  • 编辑器保存远程图片 CSRF 失败修复:编辑器改为写请求前先取 Antiforgery 令牌并带上请求头(头名由服务端下发,不写死),令牌失效时自动刷新重试一次;取令牌失败会在控制台输出原因,不再静默失败。

📝 [v2.3.0] - 2026.09.17

🔒 安全加固

  • 通知 Hub 越权修复:NotificationHub 改为必须认证,用户组只按服务端解析出的当前用户加入/移除;删除可传入任意 userId 的 JoinGroup / LeaveGroup,前端改为随连接携带签名票据
  • HtmlEditor 上传 CSRF 防护:上传与保存远程图片接口增加认证与 Antiforgery 校验,校验失败返回 400 而非 500;编辑器通过 X-CSRF-TOKEN 请求头携带令牌
  • 远程图片下载 SSRF 加固:禁止自动重定向,逐跳重新做地址校验(最多 3 次、禁止 HTTPS 降级);通过连接回调锁定已校验 IP,杜绝 DNS Rebinding;响应流式落盘,避免内存无限增长
  • Excel 导入数据权限:导入、批量更新、批量删除统一走数据权限校验,不能再靠伪造主键越权操作他人数据
  • 私有文件下载:新增受控下载接口 /api/files/{id},校验登录、租户、文件记录与授权;公开文件仍走原有静态地址,行为不变
  • 路径安全:新增统一安全路径服务,代码生成器、上传、下载、模板等路径全部做根目录包含性校验,路由路径增加白名单
  • 登录票据认证:新增认证处理器,使 [Authorize] 能识别框架现有的加密 Cookie 登录态

🔐 多租户隔离

  • 移除二级容器:多租户扩展不再使用 BuildServiceProvider(),FreeSqlCloud 改由服务提供者工厂注册
  • 建表并发保护:同一租户的初始化串行化,避免并发请求重复建库建表
  • 租户编码白名单:创建、切换与获取租户数据库前统一校验编码,避免其进入数据库名、文件路径与缓存键
  • 缓存与 Redis 隔离:系统参数、权限、下拉/树/字典缓存及聊天 Redis 键全部带上租户前缀,租户之间不再共用业务缓存与锁

⚖️ 审批一致性

  • 事务化:提交、同意、驳回、撤回、转交全部纳入数据库事务,任一步失败整体回滚,不再出现半成功数据
  • 并发保护:所有状态变更改为条件更新,并发审批/转交/撤回只会成功一次,不会重复推进节点或产生重复审批记录
  • 通知时机:站内信与实时推送统一移到事务提交之后,提交失败绝不通知成功
  • 服务端权威:审批人、当前节点、下一节点、审批级次完全由服务端按流程配置决定,客户端无法指定或跳节点
  • 转交资格校验:转交目标必须属于当前租户且处于启用状态,禁止转交给发起人
  • 审批意见防 XSS:意见按纯文本存储并做 HTML 实体编码,同时限制长度
  • 流程配置校验:配置加载后立即校验级次连续性、审批人来源合法性与节点数量上限,非法配置直接拒绝执行
  • 异常信息收敛:审批失败只返回通用提示与 TraceId,详细异常仅写日志
  • 审计字段:审批记录新增操作人、变更前后状态与流程实例标识,转交与撤回可完整追溯

🐛 问题修复

  • 右上角通知重复显示:修复数据库未读列表与 SignalR 实时推送同时到达时同一条消息被插入两次的问题
  • PBKDF2 参数升级:密码哈希升级为带版本与迭代次数的新格式,旧密码仍可正常登录并在登录成功后自动重新哈希
  • 上传状态码语义化:未登录 401、无权限 403、参数错误 400、文件过大 413、格式不支持 415,不再所有错误都返回 500
  • 上传大小双层限制:HTTP 解析层与业务层都做 10MB 限制
  • 微信匿名接口防刷:登录、解密与生成小程序码增加参数校验、限流与超时,错误不再回传外部接口细节
  • 数据库日志限流:写库失败时使用有界缓存与指数退避,恢复后自动补写,并补充 TraceId、请求路径、用户与租户字段
  • 同步阻塞消除:移除 GetAwaiter().GetResult() 之类的同步阻塞异步写法
  • 计划任务时区可配置:时区不再硬编码,默认保持原有中国时区行为
  • 雪花 ID 启动校验:WorkId 保持 6 bit,超出范围启动即报错,提示多实例配置不同 WorkerId

✨ 新增功能

  • 统一安全配置:新增 Security 配置节,集中管理上传大小、重定向次数、登录锁定、CSRF 与限流参数,并附示例
  • 全局异常处理:接口异常统一转成友好提示 + TraceId,详细异常只写日志

📝 [v2.2.18] - 2026.09.08

✨ 新增功能

  • 保存后页码保留:编辑已有数据保存后停留在当前页码,不再跳回第一页;仅新增时才回到第一页展示最新记录(“保存并关闭”与“保存不关闭”一致)
  • 更换数据库指南:新增《更换数据库类型》文档,介绍如何从 SQLite 切换到 MySQL / SQL Server / PostgreSQL 等 FreeSql 支持的数据库
  • Serilog 文件日志配置指南:新增《Serilog 日志配置》文档,提供与框架数据库日志并存的接入方式(writeToProviders: true)

🐛 问题修复

  • 文件上传提示修复:上传过程任何异常(磁盘/权限/图片处理/数据库等)统一转为“上传失败”提示;上传弹窗增加 60 秒超时自动关闭兜底,避免“上传中”提示永久不关闭
  • 在线聊天“操作已取消”错误修复:修复 SignalR 连接与在线状态维护在取消/释放时抛出的 “The operation was canceled” 错误,避免在线用户状态异常
  • 强认证下聊天/通知自连接失败修复:通知与聊天原先用公共域名做服务端自连,强认证(HttpOnly Cookie)、反向代理或局域网 IP 访问时服务器连不回自己导致 SignalR 连接全部失败、聊天永远离线、页面反复刷新;现改为使用 Kestrel 实际监听地址,连接失败只降级相关功能,不影响页面与电路
  • 菜单 PathLower 空引用防护:后台菜单过滤对 PathLower 判空,避免空值导致布局崩溃
  • 代码生成行布局修复:生成页面编辑字段数量较少时正确包裹 row form-inline 容器
  • MailKit 版本升级:邮件扩展显式引用 MailKit 4.17.0,避免与 NETCore.MailKit 传递依赖冲突

📝 [v2.2.17] - 2026.08.30

✨ 新增功能

  • 编辑弹窗保存按钮 loading:新增/编辑窗口点击“保存”或“保存并关闭”任意一个后,两个按钮同时显示加载状态并禁用,保存出错(含异常)自动恢复可点击,同时防止重复提交
  • 表格查询期间显示 loading:AdminTable 数据查询中空行不再闪现“无数据”,查询完成前显示加载指示,结束后才根据结果展示数据或“无数据”
  • 导出性能大幅优化:AdminTable 导出只查询表格可见列(动态 DTO 投影),不再 SELECT * 拉取大文本/导航数据;导出时跳过 Include/IncludeMany 导航集合加载(查询事件新增 IsExport 标记);Excel 直接以 MiniExcel 写入,Lookup 列只解析一次;远端数据库场景下数千行导出从分钟级降到秒级,导出文件只包含可见列
  • 点击导出立即提示:导出时表格工具栏显示“正在导出”徽标(服务端状态驱动、非阻塞),一点导出即出现,完成或出错自动消失
  • Data Protection 密钥持久化:新增 DataProtectionKeyPath / DataProtectionApplicationName 选项,可将认证 Cookie 加密密钥持久化到固定目录并固定应用名,IIS 程序池重启后不再强制重新登录

🐛 问题修复

  • 解决方案构建修复:EasyAdminBlazor.AliyunSms 扩展目标框架由 net9.0 修正为 net10.0,并统一所有项目版本号
  • 消息中心连接泄漏修复:Widget 组件重写 DisposeAsync(bool) 释放 SignalR 连接,修复组件销毁时连接未释放的问题
  • AdminTable 权限包装逻辑修复:内部默认保存/删除委托不再在二次渲染时被重复包装(原方法组比较恒为 false 导致重复权限校验)
  • 启用/禁用开关可靠性修复:用户、菜单、组织页面的启用/禁用切换改为等待数据库写入,失败时回滚开关状态并提示错误
  • Redis 消息落库健壮性:反序列化失败的条目不再传入数据库写入
  • 微信支付证书加载现代化:改用 X509CertificateLoader 替代已过时的 X509Certificate2 构造函数;平台证书缺失时给出明确错误日志
  • 用户角色搜索“无法匹配 Roles”修复:忽略搜索列改为在组件首次渲染前提取,避免首次查询竞态导致导航集合(Roles)过滤直接传入 FreeSql 报错;动态过滤剪枝后不再残留空壳节点
  • 演示项目移除未使用的 Session 中间件:应用本身不使用 ASP.NET Session,移除后不再出现“Error unprotecting the session cookie”警告
  • 测试代码现代化:日志队列测试改用异步等待,消除阻塞调用

📝 [v2.2.16] - 2026.08.22

✨ 新增功能

  • 企业站前台 Tailwind 模板:新增 easyadmin-frontend skill(corporate 模板,Tailwind CSS 简洁大气风格);前台新增首页/服务/产品/新闻/联系我们,新闻含分类筛选与评论(验证码+审核),导航含后台入口;新增 Service/Product/Feedback 实体与后台 CRUD 页面;初始化服务/产品示例数据与演示菜单(服务/产品/留言反馈),博客菜单更名 新闻管理/新闻分类(中英文);移除旧 Themes 主题功能
  • EasyAdminBlazor.Mail 新增腾讯云邮件推送(SES):直接调用腾讯云 API(TC3-HMAC-SHA256 签名),不引入 SDK
  • 邮件服务商切换:新增 Mail:Provider 配置(Smtp / SendCloud / TencentCloud),默认 Auto 自动选择(SendCloud → 腾讯云 → SMTP),调用方无需改代码即可切换
  • 模板邮件:腾讯云模式下 SendTemplateEmailAsync 传模板ID(数字),模板参数自动转为 TemplateData JSON
  • 后台配置:系统配置页新增 SendCloud / 腾讯云参数分组,各组均支持发送测试邮件;显式指定 Mail:Provider 时只展示对应服务商的配置项,Auto 时才展示全部
  • 按调用指定服务商:SendEmailAsync 新增可选的 provider 字符串参数("Smtp" / "SendCloud" / "TencentCloud"),调用时可临时指定;服务商由 Mail 扩展解析,Core 不依赖具体服务商,后续新增服务商无需发布 Core
  • 配置页数据驱动:后台"邮件测试"由配置贡献者声明驱动(IsEmailProvider / EmailRequiredKeys),新增邮件服务商只需在 Mail 扩展中加贡献者类,无需再改 /Admin/Config
  • 数据权限接口自动开启:AdminTable/AdminMultiSelect/AdminSelectTable 在实体实现 IDataPermission+IEntityCreated 时自动启用数据权限,无需页面显式配置
  • 前台底部官网链接:前台公共布局底部增加官网入口
  • AI 助手配置文档:新增 doc/AI助手配置.md(含英文版),介绍 easyadmin-conventions / easyadmin-frontend 技能与企业站模板在 ChatGPT / Cursor / Claude 中的使用方式

🐛 问题修复

  • 腾讯云邮件 API 业务错误误判修复:腾讯云 API 3.0 对业务错误也返回 HTTP 200,错误在响应体 Response.Error 中,现会正确识别并返回失败
  • 邮件发送失败原因写入错误日志:SendCloud / 腾讯云发送失败原因以 Error 级别写入错误日志(错误日志只记录 Error 及以上级别)
  • 官网域名拼写修正:easyadmim 修正为 easyadmin(后台布局、首页、README、文档)
  • 租户主键冲突修复:删除 SysTenant.Id 遗留 AOP 分支,long 主键不再被 ToLower() 且恢复雪花 ID 生成,修复新增第二个租户时主键冲突
  • 企业站菜单种子幂等修正:迁移旧格式 /Admin/Service 路径、Path 统一为 Admin/*,避免重复插入菜单;首页文档解析正则与 csproj 清理
  • AuthPath 状态残留修复:带按钮参数时同步更新 AuthPathSuccess,页面主体不再残留旧状态
  • Redis 订阅异常保护:RedisService.Subscribe 反序列化失败不再中断订阅
  • 空引用与警告清理:HexToBytes 返回类型修正为 byte[]?;Chat.razor / FileUploadController / Generator.Model 消除空引用与未赋值警告;移除 MainLayout 中的 Console.WriteLine 调试残留
  • 更新日志不显示修复:后台首页可正常展示更新日志

🔧 重构与其他

  • 精简解决方案:删除 EasyAdminBlazor.Api.Host 与 EasyAdminBlazor.Application 项目;博客实体 Article/Classify/Comment 移入 EasyAdminBlazor.Test/Entities/Blog(命名空间不变);解决方案与 csproj 引用同步更新;skill 与 doc 补充分层架构说明(共享层 + 多宿主入口模式),移除本地路径引用
  • 版本统一:EasyAdminBlazor / EasyAdminBlazor.Core / EasyAdminBlazor.Mail 等包版本统一升级到 2.2.16

📝 [v2.2.15] - 2026.08.15

✨ 新增功能:后台主题色切换

  • 主题色切换器:顶栏新增调色板下拉,内置默认蓝、清新绿、典雅紫、活力橙、中国红 5 种主色,切换即时生效并持久化到本地
  • 默认主色配置:EasyAdminBlazorOptions.DefaultThemeColor 可配置系统默认主色,用户未手动选择时生效
  • 全组件主题覆盖:主色按钮、标签页激活、菜单、日历、表单焦点、下拉选中、TinyMCE 编辑器、链接色等跟随主色,深浅色模式均生效
  • 登录页主题同步:登录页应用用户保存的主题色或配置的默认主色,与后台保持一致

🐛 问题修复

  • 用户批量操作逻辑修正:未选择角色/部门/密码时不再直接执行,给出提示;批量操作增加空选保护
  • 删除引用保护:角色被用户引用、菜单被角色引用、组织存在子组织或用户时阻止删除,避免脏数据
  • 角色保存空权限保护:未选择任何菜单权限时提示,不再保存空权限角色
  • 菜单显示按钮状态修正:复选框状态与逻辑保持一致
  • 字典导入父级串位修复:多分类导入时字典项不再全部挂到最后一个分类下
  • 配置页测试邮件校验修正:只校验 SMTP 配置项,不再因其他配置为空误报;短信测试增加成功/失败/异常反馈
  • 任务调度修复:下次运行时间由服务端填充避免索引越界;编辑已有任务时保留原轮次,不再强制覆盖为永久
  • 个人资料保存后同步:修改昵称/邮箱/手机后顶栏立即更新,无需刷新
  • 文件上传空列表提示:未选择文件时不再提示"成功上传 0 个"
  • 选择组件缓存修复:缓存键由表达式引用哈希改为表达式字符串,解决缓存永不命中导致的重复查库
  • 操作日志越界保护:无参删除方法不再访问不存在的参数
  • 代码生成器容错:程序集扫描增加 ReflectionTypeLoadException 容错,避免页面打不开
  • 登录页主题色应用:登录页现在应用用户保存的主题色或配置的默认主色,与后台一致
  • 标签页标题本地化:/Admin 标签页标题支持中英文(控制台/Home)

📝 [v2.2.14] - 2026.08.14

⬆️ 依赖升级

  • BootstrapBlazor 升级至 10.9.2:修复 ColumnVisibleItem 废弃 API 兼容问题
  • FreeSql 相关包统一升级至 3.5.311(FreeSql.Extensions.AggregateRoot、FreeSql.Extensions.JsonMap、FreeSql.Provider.Sqlite、FreeSql.Provider.MySqlConnector),FreeSql.Cloud 保持最新 2.0.1

🔒 安全修复

  • 修复站内信存储型 XSS:消息/通知内容渲染前进行服务端 HTML 净化(移除 script、事件属性、javascript: 链接等),聊天 Markdown 渲染增加 HTML 编码防护
  • 修复 AdminSelectTable 数据权限绕过:按已选 Id 回填实体时同样应用数据权限过滤,防止低权限用户越权读取记录
  • 修复 ChatHub 身份冒用:SignalR 连接时用登录 Cookie 校验身份,发送消息时校验发送者与登录用户一致,杜绝伪造 userid 冒充他人收发消息
  • 修复数据权限 Custom 配置回退为"无可见数据"(fail-closed),避免配置异常时越权看到全部数据
  • 登录页安全增强:UAParser 单例复用、IP 解析失败回退 unknown、登录失败计数进程内锁、验证码调试输出清理

🐛 问题修复

  • 修复强制改密弹窗崩溃:DialogService.Show 延迟到首帧渲染后调用,避免 BootstrapBlazorRoot 未注册时抛异常;改密成功后自动关闭弹窗并刷新登录态
  • 修复打印模块 SQL 方言兼容:分页查询按数据库类型生成 TOP/LIMIT/FETCH FIRST,参数化查询,不再静默吞错
  • 修复打印模板目标实体为空:程序集扫描增加 ReflectionTypeLoadException 容错
  • 修复报表设计器脚本加载:eval + 同步 XHR 改为标准 <script> 注入(避免 CSP 拦截、重复加载),生成 HTML 字段名转义
  • 修复消息删除越权:删除仅解除当前用户关联,不误删他人消息
  • 修复编辑用户密码留空覆盖原密码
  • 修复批量删除受保护项被删除:剔除超管/管理员后删除
  • 修复权限缓存版本号失效:权限变更后立即失效缓存
  • 修复草稿保存不关闭时旧键残留
  • 修复 Cron 表达式未校验:新增任务预校验,非法表达式回退 5 秒
  • 修复聊天组件资源泄漏:补全定时器与 SignalR 连接释放、beforeunload 引用释放
  • 修复邮件服务 HttpClient 泄漏:改用 IHttpClientFactory 管理连接
  • 修复新租户管理员未强制改密
  • 修复 AdminTable 删除空集合空引用

✨ 其他改进

  • GetConfig 不再抛异常并增加 1 分钟缓存
  • 租户数据库类型下拉显式数据源,移除任务调度模板中无消费者的"HTTP请求/清理任务数据"模板
  • 新增 XSS 净化等单元测试,测试用例 156 → 160

📝 [v2.2.12] - 2026.06.17

🖨️ 新增:打印模板设计器 (重磅功能)

  • 可视化打印模板设计:新增 /Admin/PrintTemplate 页面,用户可通过可视化界面设计打印模板
  • 与 AdminTable 联动:如果实体存在对应的打印模板,AdminTable 自动显示「打印」按钮,选择记录即可一键打印
  • 打印服务抽象:新增 PrintService,支持在任何地方调用打印功能

🎨 打印设计器增强

  • 两列布局插入按钮:模板设计器支持一键插入两列布局,方便设计分栏打印样式
  • 中英文多语言支持:完善打印模块的国际化翻译(zh.json / en.json)

🐛 修复

  • 修复左侧菜单无法最小化的问题

[v2.2.11] - 2026.06.13

♻️ 架构重构

  • 认证中间件拆分:将 EasyAdminAuthStartupFilter(内联 120 行)重构为三个独立中间件,各司其职
    • AdminRouteSecretMiddleware:管理后台路由混淆保护
    • AuthCookieMiddleware:Blazor Server Cookie 桥接端点
    • CookieOptionsHelper:共享 Cookie 安全策略工厂,消除重复代码
  • 扩展类命名空间规范化:9 个无命名空间的扩展类(UtilConvertExtension、StringExtension 等)统一加入 EasyAdminBlazor.Infrastructure.Extensions 命名空间,避免 NuGet 消费者命名空间污染
  • 破坏性变更:SysLoginLog.LoginType类型。升级到本版本后,请手动执行:migrate_enum_v.2.2.11.sql

🧪 测试覆盖

  • 新增单元测试项目 EasyAdminBlazor.Tests(xUnit + Moq + FluentAssertions)
    • 150 个测试用例,覆盖安全校验、实体体系、扩展方法、UA 解析、加密工具、日志基础设施
    • 测试安全关键路径:重定向防攻击、SSRF 防护、文件魔数校验、PBKDF2/AES 加解密

🔧 优化改进

  • UAParser 单例化:AuthService 改为构造注入 UAParser 单例,避免每次登录重新编译正则表达式
  • OperationLogAttribute 参数截断保护:序列化参数上限 2000 字符,超过自动截断防止撑爆内存
  • DatabaseLoggerBackgroundService 异常兜底:增加通用异常捕获,防止意外异常导致日志服务永久停止

🛡️ 安全增强

  • SSRF 防护修复:FileSecurityValidator.IsSafeRemoteUri 中 UriHostNameType 非 [Flags] 枚举,误用 HasFlag 导致私有 IP 地址绕过安全校验,已修复
  • 管理后台路由 secret 独立为中间件,更可控的管道顺序

🌐 国际化

  • 枚举值英文化:所有中文枚举成员改为英文(整数值不变,向后兼容)
    • SysLoginLog.LoginType:{ 登陆成功, 登陆失败 } → { Success, Failure }
    • SysOrg.OrgType:{ 集团, 公司, 部门, 供应商 } → { Group, Company, Department, Supplier }
    • OperationResult:{ 成功, 失败 } → { Success, Failure }
    • OperationType:{ 查询, 添加, 修改, 删除, 导入, 导出 } → { Query, Add, Update, Delete, Import, Export }

🐛 问题修复

  • 修复草稿计时器不重启:OnSaveWithoutClose 中 _restartDraftAfterClose 标志在对话框关闭后才设置,导致计时器永不再启动,手动点击也不响应
  • 修复导航属性 Nullable 标注:SysUser.Org、SysOrg.Parent、SysMenu.Parent 等导航属性正确标记为可空,消除 null! 滥用

[v2.2.10] - 2026.06.07

🎉 新增功能

  • 全新代码生成器:可视化生成 CRUD 页面(仅本地开发环境有效)
    • 旧版代码生成器已废弃,请自行添加以下Url为后台菜单:Admin/CodeGenerator
  • AdminTable 草稿功能
    • EnableDraft:自动保存表单数据到 localStorage
    • EnableSaveWithoutClose:保存后不关闭窗口
    • DraftAutoSaveInterval:自定义保存间隔(默认 30 秒)
  • 编辑框草稿智能恢复:有内容变更才询问,无改动自动清理
  • 保存窗口新增「保存不关闭」按钮

🔧 优化改进

  • 拆分 AdminContext 为多个 partial 类,代码更清晰
  • 文件选择组件 AdminFileInput 支持直接复制路径
  • 数据库日志改为异步队列写入,减少请求阻塞
  • 日志支持批量入库 + 队列大小限制
  • 服务停止时自动 flush 剩余日志
  • FileService 改用 IHttpClientFactory 管理 HttpClient
  • 清理 Core 项目中的 nullable 警告

🛡️ 安全增强

  • Cookie 认证:移除 JS 读写 fallback,统一通过服务端写入 HttpOnly Cookie
  • 开放重定向修复:登录及认证接口安全加固
  • SSRF 防护:远程图片保存增加安全检查
  • 文件上传:增加真实内容检测,校验流大小限制
  • 登录票据改用 ASP.NET Core Data Protection 保护
  • 登录限流 IP 获取改为可信代理模式(不再直接信任 X-Forwarded-For)

🐛 问题修复

  • 修复 AdminContext 中 HttpContext 可能为空的异常
  • 优化登录/退出跳转逻辑,兼容 Blazor Server WebSocket 场景

📚 文档更新

  • 新增《代码生成器》中英文文档
  • 更新《AdminTable》《菜单管理》《数据权限》《项目介绍》文档

[v2.2.9] - 2026.05.30

新增 🎉

  • 增加异地登录退出选项
  • 完善各模块英文翻译,默认开启多语言。
  • 破坏性变更:SysMenuType和DataPermissionType类型。升级到本版本后,请手动执行:migrate_enum_v.2.2.7.sql

[v2.2.6] - 2026.05.29

新增 🎉

  • 后台首页增加更新日志展示
  • 示例模块内容更新

修复 🐛

  • 避免 Chat 定时器在 DI 已释放时访问服务导致 ObjectDisposedException
  • AdminContext 增加 IsAdmin 属性
  • 修复 OnBeforeQuery 里 e.Select.OrderByDescending 不生效的问题
  • 修复登录没获取到 IP 地址的问题
  • 修复没有修改权限时还能切换行内 Switch 的问题
  • 修复 BootstrapBlazor 编辑窗口提交按钮一点就 Loading 的问题
  • 修正不安装 EasyAdminBlazor.Scheduler 扩展无法登录的问题

重构 📦

  • 重构默认排序逻辑
  • 优化 FreeSql 非多租户模式下的注册
  • 同步 NuGet 版本号

文档 📝

  • 新增大量文档:AdminTable、多租户、多语言、数据权限、文件管理等
  • 更新快速上手文档
  • 增加项目介绍文档

v2.2.0 — 2026.05.23

  • 重构:FreeRedis 以扩展方式提供(EasyAdminBlazor.Redis)
  • 重构:计划任务以扩展方式提供(EasyAdminBlazor.Scheduler)
  • 重构:多租户以扩展方式提供(EasyAdminBlazor.MultiTenant)
  • 重构:缓存以扩展方式提供(EasyAdminBlazor.FusionCache)
  • 重构:FusionCache 作为扩展项目提供

v2.0.x — 2026.05.22 ~ 2026.05.23

  • 新增:微信支付

v2.0.x — 2026.04.09 ~ 2026.04.15

  • 重构:架构分层,数据跟 UI 分开,以适应多层架构
  • 新增:登录增加登录城市记录
  • 优化:完全适配移动端
  • 修复:移除 BootstrapBlazor 的 WebClient,解决超时异常
  • 增强:AdminSelectEntity.razor 改为可绑定任意字段
  • 修复:保存异常时不能再次点击保存
  • 修复:修正 OrgId 硬编码问题,Flags 类型匹配时优先取 Column(Name=值)
  • 增强:表格的筛选和高级查询增加 Flags 枚举支持

v2.0.x — 2026.03.01 ~ 2026.03.20

  • 新增:给文件上传 Picker 增加权限
  • 新增:通过安全码访问后台
  • 新增:增加 SendCloud 邮件发送
  • 修复:解决多项目任务计划添加失败问题

v2.0.x — 2025.12.31 ~ 2026.02.22

  • 优化:TinyMCE 不能修改图片 alt 的问题
  • 新增:菜单增加是否显示隐藏

v2.0.3 — 2026.01.03

  • 集成:直接集成 FusionCache
  • 增强:缓存增加 GetOrSet 方法

v2.0.1 — 2026.01.01

  • 增强:管理员列表增加是否有效快速更改项
  • 增强:加密密钥可自定义
  • 增强:加密登录 Cookie
  • 增强:验证码和登录错误次数在配置 Redis 的情况下用 Redis 存储,没有 Redis 则用内存存储

v2.0.0 — 2025.12.31

  • 升级:升级为 .NET 10
  • 升级:升级所有 NuGet 包到最新版

v1.4.7 — 2025.06.06 ~ 2025.11.25

  • 新增:上传参数可配置
  • 增强:更改树形组件的排序属性为 string 类型
  • 修复:修复模糊查询不出记录的问题
  • 新增:增加图片验证码扩展(EasyAdminBlazor.Captcha)
  • 修复:修复组织负责人不能指定的问题
  • 新增:增加微信接入扩展(EasyAdminBlazor.WeChat)
  • 优化:整体优化与 bug 修复

[1.4.6] - 2025-06-02

新增功能

  • 编辑器增加粘贴上传功能
  • 编辑器增加远程图片下载和本地图片拖动上传功能
  • AdminTable组件增加根据字典数据自定义导入方法

修复问题

  • 修正文件不能正确删除的问题

[1.4.5] - 2025-06-01

新增功能

  • 增加菜单收藏功能
  • 登录验证码增加可配置是否显示
  • 系统名称增加可配置是否显示
  • 帮助链接增加可配置是否显示
  • 消息中心增加可配置是否显示
  • 增加AdminSelectTreeEntity组件
  • 增加字典多选组件AdminDictMultiSelect
  • 增加AdminTree组件(可根据实体生成树,不用查询数据再绑定,其它Admin开头的数据类组件都是这个效果)
  • AdminTable组件增加根据字典数据自定义导入方法

[1.4.0] - 2025-05-29

新增功能

  • 优化页面权限验证
  • 增加默认租户ID
  • 消息提醒查看增加上一条下一条
  • 将聊天组件单独作为扩展项目
  • 增加强制用户修改密码功能
  • 增加可上传类型提示
  • 优化文件上传逻辑,增强文件上传安全检查
  • 将邮件发送,短信发送,富文本编辑器独立成扩展方便后期更换
  • 文件选择样式调整
  • 任务计划增加日志查看

[1.3.0] - 2025-05-26

新增功能

  • 增加任务计划
  • 修改登录逻辑

[1.2.0] - 2025-05-25

新增功能

  • 增加站内信
  • 增加系统通知
  • 风格调整
  • 文件选择、富文本及其它组件夜间模式完善

[1.1.0] - 2025-05-22

新增功能

  • 用户增加批量设置角色、部门、重置密码功能
  • 组织架构增加负责人绑定
  • 增加组织结构图
  • 增加字典批量导入导出
  • AdminSelectTable组件增加Id绑定@bind-ValueId="v.ArticleId"

修复问题

  • 修正租户ORM对象偶尔丢失问题(改为每次URL改变后重新获取)
  • 登录成功后未重置密码错误计数
  • 修正功能菜单单个选择时未返回选中项问题

[1.0.0] - 2025-05-15

初始版本

  • 发布项目基础功能。