From 31c1b1741da330b7ecfa0cb4dc7be5173bdea980 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 29 May 2026 12:34:02 +0800 Subject: [PATCH] Fix MySQL index key too long for ResourcePermissionGrant Shorten ResourceName/ResourceKey to 128 on MySQL so the composite unique index fits the InnoDB 3072 bytes limit under utf8mb4. --- ...ermissionManagementDbContextModelBuilderExtensions.cs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs index c7bf3f2a5a..d355019301 100644 --- a/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs +++ b/modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/AbpPermissionManagementDbContextModelBuilderExtensions.cs @@ -33,9 +33,14 @@ public static class AbpPermissionManagementDbContextModelBuilderExtensions b.ConfigureByConvention(); + // MySQL has a 3072 bytes index key length limit (utf8mb4), the composite + // unique index below exceeds it, so shorten these columns for MySQL only. + var maxResourceNameLength = builder.IsUsingMySQL() ? 128 : PermissionGrantConsts.MaxResourceNameLength; + var maxResourceKeyLength = builder.IsUsingMySQL() ? 128 : PermissionGrantConsts.MaxResourceKeyLength; + b.Property(x => x.Name).HasMaxLength(PermissionDefinitionRecordConsts.MaxNameLength).IsRequired(); - b.Property(x => x.ResourceName).HasMaxLength(PermissionGrantConsts.MaxResourceNameLength).IsRequired(); - b.Property(x => x.ResourceKey).HasMaxLength(PermissionGrantConsts.MaxResourceKeyLength).IsRequired(); + b.Property(x => x.ResourceName).HasMaxLength(maxResourceNameLength).IsRequired(); + b.Property(x => x.ResourceKey).HasMaxLength(maxResourceKeyLength).IsRequired(); b.Property(x => x.ProviderName).HasMaxLength(PermissionGrantConsts.MaxProviderNameLength).IsRequired(); b.Property(x => x.ProviderKey).HasMaxLength(PermissionGrantConsts.MaxProviderKeyLength).IsRequired();