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
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.