Changelog

📝 [v2.2.12] - 2026.06.17

🖨️ NEW: Print Template Designer (Major Feature)

  • Visual Print Template Designer: New /Admin/PrintTemplate page for designing print templates through a visual interface
  • AdminTable Integration: If an entity has corresponding print templates, AdminTable automatically shows a "Print" button — select records and print with one click
  • Print Service Abstraction: New PrintService that can be called from anywhere

🎨 Designer Enhancements

  • 2-Column Layout Button: One-click insertion of two-column layouts in the template designer
  • i18n Support: Complete Chinese/English translations for the print module (zh.json / en.json)

🐛 Bug Fixes

  • Fixed issue where the left sidebar menu could not be minimized

[v2.2.11] - 2026.06.13

♻️ Architecture Refactoring

  • Auth Middleware Split: Refactored EasyAdminAuthStartupFilter (120-line inline middleware) into three independent classes
    • AdminRouteSecretMiddleware: Admin route obfuscation protection
    • AuthCookieMiddleware: Blazor Server cookie bridging endpoints
    • CookieOptionsHelper: Shared cookie security policy factory, eliminating code duplication
  • Extension Namespace Normalization: 9 namespace-less extension classes (UtilConvertExtension, StringExtension, etc.) moved to EasyAdminBlazor.Infrastructure.Extensions namespace to avoid polluting NuGet consumers' global namespace

🧪 Test Coverage

  • New unit test project EasyAdminBlazor.Tests (xUnit + Moq + FluentAssertions)
    • 150 test cases covering security validation, entity hierarchy, extension methods, UA parsing, encryption utilities, and logging infrastructure
    • Security-critical paths tested: redirect validation, SSRF protection, file magic-byte verification, PBKDF2/AES encryption

🔧 Improvements

  • UAParser Singleton: AuthService now injects UAParser as a singleton via constructor, avoiding regex recompilation on every login
  • OperationLogAttribute Parameter Truncation: Serialized parameters capped at 2000 characters, auto-truncated to prevent memory exhaustion
  • DatabaseLoggerBackgroundService Exception Safety: Added general exception handling to prevent the log service from crashing permanently on unexpected errors

🛡️ Security Enhancements

  • SSRF Bug Fix: FileSecurityValidator.IsSafeRemoteUri incorrectly used HasFlag on UriHostNameType (non-[Flags] enum), causing private IP addresses to bypass security checks
  • Admin route secret middleware now has more controllable pipeline ordering

🌐 Internationalization

  • Enum Values Anglicized: All Chinese enum members renamed to English (integer values unchanged, backward compatible)
    • SysLoginLog.LoginType: { 登陆成功, 登陆失败 }{ Success, Failure }
    • SysOrg.OrgType: { 集团, 公司, 部门, 供应商 }{ Group, Company, Department, Supplier }
    • OperationResult: { 成功, 失败 }{ Success, Failure }
    • OperationType: { 查询, 添加, 修改, 删除, 导入, 导出 }{ Query, Add, Update, Delete, Import, Export }

🐛 Bug Fixes

  • Fixed draft timer not restarting: In OnSaveWithoutClose, the _restartDraftAfterClose flag was set after the dialog close callback, preventing the auto-save timer from ever restarting. Manual draft save was also unresponsive.
  • Fixed Navigation Property Nullable Annotations: SysUser.Org, SysOrg.Parent, SysMenu.Parent and other navigation properties properly marked as nullable, eliminating null! abuse

[v2.2.10] - 2026.06.07

🎉 New Features

  • New Code Generator: Visually generate CRUD pages (only in local development environment)
    • The old version of the code generator has been deprecated. Please manually add the following URL as a backend menu: Admin/CodeGenerator
  • AdminTable Draft Features
    • EnableDraft: Auto-save form data to localStorage
    • EnableSaveWithoutClose: Keep window open after save
    • DraftAutoSaveInterval: Custom save interval (default 30 seconds)
  • Smart Draft Recovery: Only prompt when content changed, auto-clean unchanged drafts
  • New "Save Without Closing" button

🔧 Improvements

  • Split AdminContext into multiple partial classes for cleaner code
  • AdminFileInput component now supports direct path copying
  • Database logging changed to async queue writes to reduce request blocking
  • Logging supports batch insertion + queue size limits
  • Automatically flush remaining logs on service stop
  • FileService now uses IHttpClientFactory for HttpClient management
  • Cleaned up nullable warnings in Core project

🛡️ Security Enhancements

  • Cookie Auth: Removed JS read/write fallback, unified server-side HttpOnly Cookie writes
  • Open Redirect Fix: Security hardening for login and authentication endpoints
  • SSRF Protection: Added security checks for remote image saving
  • File Upload: Added content type detection and stream size validation
  • Login tickets now protected by ASP.NET Core Data Protection
  • Login rate limiting IP retrieval changed to trusted proxy mode

🐛 Bug Fixes

  • Fixed potential null HttpContext exception in AdminContext
  • Optimized login/logout redirect logic for Blazor Server WebSocket scenarios
  • Fixed circular dependency serialization issue

📚 Documentation Updates

  • Added Code Generator documentation (Chinese & English)
  • Updated AdminTable, Menu Management, Data Permission, Project Introduction docs

[v2.2.9] - 2026-05-30

Added 🎉

  • Added remote login logout option
  • Improved English translations for all modules, localization enabled by default.
  • Breaking change: SysMenuType and DataPermissionType enum types changed. After upgrading to this version, please manually execute: migrate_enum_v.2.2.7.sql

[v2.2.6] - 2026-05-29

Added 🎉

  • Added changelog display on the admin dashboard
  • Updated sample module content

Fixed 🐛

  • Prevent Chat timer from accessing services after DI disposal causing ObjectDisposedException
  • Added IsAdmin property to AdminContext
  • Fixed issue where e.Select.OrderByDescending in OnBeforeQuery was not working
  • Fixed login not obtaining IP address
  • Fixed issue where inline Switch could still be toggled without edit permission
  • Fixed BootstrapBlazor edit dialog submit button stuck in loading state
  • Fixed login failure when EasyAdminBlazor.Scheduler extension is not installed

Refactored 📦

  • Refactored default sorting logic
  • Optimized FreeSql registration in non-multi-tenant mode
  • Synced NuGet package versions

Documentation 📝

  • Added extensive documentation: AdminTable, Multi-Tenant, Localization, Data Permission, File Management, etc.
  • Updated quick start documentation
  • Added project introduction documentation

v2.2.0 — 2026-05-23

  • Refactored: FreeRedis provided as an extension (EasyAdminBlazor.Redis)
  • Refactored: Scheduled tasks provided as an extension (EasyAdminBlazor.Scheduler)
  • Refactored: Multi-tenancy provided as an extension (EasyAdminBlazor.MultiTenant)
  • Refactored: Caching provided as an extension (EasyAdminBlazor.FusionCache)
  • Refactored: FusionCache provided as an extension project

v2.0.x — 2026-05-22 ~ 2026-05-23

  • Added: WeChat Pay

v2.0.x — 2026-04-09 ~ 2026-04-15

  • Refactored: Architecture layering, separated data from UI to accommodate multi-layer architecture
  • Added: Added login city record
  • Optimized: Fully adapted for mobile devices
  • Fixed: Removed BootstrapBlazor's WebClient to resolve timeout exceptions
  • Enhanced: AdminSelectEntity.razor now supports binding to any field
  • Fixed: Save button could not be clicked again after a save exception
  • Fixed: Corrected OrgId hardcoding issue, now prioritizes Column(Name=value) for Flags type matching
  • Enhanced: Table filtering and advanced search now support Flags enums

v2.0.x — 2026-03-01 ~ 2026-03-20

  • Added: Added permission control for file upload Picker
  • Added: Access admin backend via security code
  • Added: Added SendCloud email delivery
  • Fixed: Resolved task scheduling failure in multi-project scenarios

v2.0.x — 2025-12-31 ~ 2026-02-22

  • Optimized: Fixed TinyMCE not being able to modify image alt text
  • Added: Menu show/hide option

v2.0.3 — 2026-01-03

  • Integrated: Directly integrated FusionCache
  • Enhanced: Added GetOrSet method to cache

v2.0.1 — 2026-01-01

  • Enhanced: Admin list added quick toggle for enabled/disabled status
  • Enhanced: Encryption key is now customizable
  • Enhanced: Encrypted login Cookie
  • Enhanced: CAPTCHA and login error count stored in Redis when configured, otherwise in-memory

v2.0.0 — 2025-12-31

  • Upgraded: Upgraded to .NET 10
  • Upgraded: Upgraded all NuGet packages to latest versions

v1.4.7 — 2025-06-06 ~ 2025-11-25

  • Added: Upload parameters are configurable
  • Enhanced: Changed tree component's sort property to string type
  • Fixed: Fixed issue with fuzzy search returning no results
  • Added: Added image CAPTCHA extension (EasyAdminBlazor.Captcha)
  • Fixed: Fixed issue where organization responsible person could not be assigned
  • Added: Added WeChat integration extension (EasyAdminBlazor.WeChat)
  • Optimized: Overall optimization and bug fixes

[1.4.6] - 2025-06-02

Added

  • Editor added paste-to-upload functionality
  • Editor added remote image download and local image drag-to-upload functionality
  • AdminTable component added custom import method based on dictionary data

Fixed

  • Fixed issue with files not being deleted correctly

[1.4.5] - 2025-06-01

Added

  • Added menu favorites feature
  • Login CAPTCHA now configurable for display
  • System name now configurable for display
  • Help link now configurable for display
  • Message center now configurable for display
  • Added AdminSelectTreeEntity component
  • Added AdminDictMultiSelect dictionary multi-select component
  • Added AdminTree component (generates tree from entity without manual data binding; same effect for other Admin-prefixed data components)
  • AdminTable component added custom import method based on dictionary data

[1.4.0] - 2025-05-29

Added

  • Optimized page permission verification
  • Added default tenant ID
  • Added previous/next navigation for message reminders
  • Separated chat component as an independent extension project
  • Added forced password change functionality
  • Added uploadable file type hints
  • Optimized file upload logic, enhanced file upload security checks
  • Separated email sending, SMS sending, and rich text editor as extensions for easy replacement
  • Adjusted file selection style
  • Added log viewing for scheduled tasks

[1.3.0] - 2025-05-26

Added

  • Added scheduled tasks
  • Modified login logic

[1.2.0] - 2025-05-25

Added

  • Added in-site messaging
  • Added system notifications
  • Style adjustments
  • Night mode improvements for file selector, rich text editor, and other components

[1.1.0] - 2025-05-22

Added

  • Added batch role assignment, department assignment, and password reset for users
  • Added responsible person binding for organization management
  • Added organization chart
  • Added batch dictionary import/export
  • AdminSelectTable component added Id binding @bind-ValueId="v.ArticleId"

Fixed

  • Fixed occasional loss of tenant ORM object (now re-fetched on every URL change)
  • Login success did not reset password error count
  • Fixed issue where single selection in function menu did not return the selected item

[1.0.0] - 2025-05-15

Initial Release

  • Released basic project functionality.