From a40b35a089532e6d47ff1340ad13cf20b81bfa9e Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 3 Jul 2020 17:18:32 +0800 Subject: [PATCH] Use constants in EF entity configuration. --- .../ApiResources/ApiResourceScopeConsts.cs | 7 ++ .../ApiResourceSecretConsts.cs} | 12 +-- .../ApiResources/ApiScopeConsts.cs | 7 -- .../ApiScopes/ApiResourceConsts.cs | 9 ++ .../ApiScopes/ApiScopeClaimConsts.cs | 7 ++ .../ApiScopes/ApiScopePropertyConsts.cs | 9 ++ .../Devices/DeviceFlowCodesConsts.cs | 12 +++ .../IdentityResourcePropertyConsts.cs | 9 ++ .../{ApiResources => ApiScopes}/ApiScope.cs | 2 +- .../ApiScopeClaim.cs | 2 +- .../ApiScopeProperty.cs | 2 +- .../IApiScopeeRepository.cs | 2 +- .../IdentityServerAutoMapperProfile.cs | 1 + .../Volo/Abp/IdentityServer/ResourceStore.cs | 5 +- .../ApiResources/ApiResourceRepository.cs | 12 ++- .../ApiResources/ApiScopeRepository.cs | 1 + .../IIdentityServerDbContext.cs | 28 +++++- .../IdentityServerDbContext.cs | 28 +++++- ...yServerDbContextModelCreatingExtensions.cs | 90 +++++++++++++------ .../AbpIdentityServerMongoDbContext.cs | 3 + 20 files changed, 193 insertions(+), 55 deletions(-) create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/{SecretConsts.cs => ApiResources/ApiResourceSecretConsts.cs} (84%) delete mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiScopeConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs create mode 100644 modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/{ApiResources => ApiScopes}/ApiScope.cs (97%) rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/{ApiResources => ApiScopes}/ApiScopeClaim.cs (94%) rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/{ApiResources => ApiScopes}/ApiScopeProperty.cs (95%) rename modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/{ApiResources => ApiScopes}/IApiScopeeRepository.cs (89%) diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs new file mode 100644 index 0000000000..8b0d8f4769 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceScopeConsts.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.IdentityServer.ApiResources +{ + public class ApiResourceScopeConsts + { + public const int ScopeMaxLength = 200; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/SecretConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs similarity index 84% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/SecretConsts.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs index 156088a97b..261f48ac2e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/SecretConsts.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiResourceSecretConsts.cs @@ -1,22 +1,22 @@ -namespace Volo.Abp.IdentityServer +namespace Volo.Abp.IdentityServer.ApiResources { - public class SecretConsts + public class ApiResourceSecretConsts { /// /// Default value: 250 /// public static int TypeMaxLength { get; set; } = 250; - + /// /// Default value: 4000 /// public static int ValueMaxLength { get; set; } = 4000; - + public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; - + /// /// Default value: 2000 /// public static int DescriptionMaxLength { get; set; } = 2000; } -} \ No newline at end of file +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiScopeConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiScopeConsts.cs deleted file mode 100644 index b61aa097f4..0000000000 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiResources/ApiScopeConsts.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Volo.Abp.IdentityServer.ApiResources -{ - public class ApiScopeConsts - { - public const int NameMaxLength = 200; - } -} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs new file mode 100644 index 0000000000..ab268690be --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiResourceConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.IdentityServer.ApiScopes +{ + public class ApiScopeConsts + { + public const int NameMaxLength = 200; + public const int DisplayNameMaxLength = 200; + public const int DescriptionMaxLength = 1000; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs new file mode 100644 index 0000000000..f3175e8774 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaimConsts.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.IdentityServer.ApiScopes +{ + public class ApiScopeClaimConsts + { + public const int NameMaxLength = 200; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs new file mode 100644 index 0000000000..5450e67030 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/ApiScopes/ApiScopePropertyConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.IdentityServer.ApiScopes +{ + public class ApiScopePropertyConsts + { + public const int KeyMaxLength = 250; + public const int ValueMaxLength = 2000; + public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs new file mode 100644 index 0000000000..b0c87fe89d --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesConsts.cs @@ -0,0 +1,12 @@ +namespace Volo.Abp.IdentityServer.Devices +{ + public class DeviceFlowCodesConsts + { + public const int DeviceCodeMaxLength = 200; + public const int UserCodeMaxLength = 200; + public const int SubjectIdMaxLength = 200; + public const int ClientIdMaxLength = 200; + public const int DataMaxLength = 50000; + public static int DataMaxLengthValue { get; set; } = DataMaxLength; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs new file mode 100644 index 0000000000..2c9ccbb0c4 --- /dev/null +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain.Shared/Volo/Abp/IdentityServer/IdentityResources/IdentityResourcePropertyConsts.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.IdentityServer.IdentityResources +{ + public class IdentityResourcePropertyConsts + { + public const int KeyMaxLength = 250; + public const int ValueMaxLength = 2000; + public static int ValueMaxLengthValue { get; set; } = ValueMaxLength; + } +} diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs similarity index 97% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs index 8e8605afa1..d35294c27f 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScope.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScope.cs @@ -4,7 +4,7 @@ using System.Linq; using JetBrains.Annotations; using Volo.Abp.Domain.Entities.Auditing; -namespace Volo.Abp.IdentityServer.ApiResources +namespace Volo.Abp.IdentityServer.ApiScopes { public class ApiScope : FullAuditedAggregateRoot { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeClaim.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs similarity index 94% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeClaim.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs index e4444cbc8c..0bb6704a22 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeClaim.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeClaim.cs @@ -1,7 +1,7 @@ using System; using JetBrains.Annotations; -namespace Volo.Abp.IdentityServer.ApiResources +namespace Volo.Abp.IdentityServer.ApiScopes { public class ApiScopeClaim : UserClaim { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeProperty.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeProperty.cs similarity index 95% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeProperty.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeProperty.cs index 38f34567a8..b6e5d7fbe8 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/ApiScopeProperty.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/ApiScopeProperty.cs @@ -2,7 +2,7 @@ using JetBrains.Annotations; using Volo.Abp.Domain.Entities; -namespace Volo.Abp.IdentityServer.ApiResources +namespace Volo.Abp.IdentityServer.ApiScopes { public class ApiScopeProperty : Entity { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiScopeeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/IApiScopeeRepository.cs similarity index 89% rename from modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiScopeeRepository.cs rename to modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/IApiScopeeRepository.cs index 184b8d1b67..1cbc48499e 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiResources/IApiScopeeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ApiScopes/IApiScopeeRepository.cs @@ -3,7 +3,7 @@ using System.Threading; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; -namespace Volo.Abp.IdentityServer.ApiResources +namespace Volo.Abp.IdentityServer.ApiScopes { public interface IApiScopeRepository : IBasicRepository { diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs index 17aae1b084..99d24e617d 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/IdentityServerAutoMapperProfile.cs @@ -2,6 +2,7 @@ using System.Security.Claims; using AutoMapper; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs index 975fc7f801..5afaaf4400 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using IdentityServer4.Models; using IdentityServer4.Stores; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.ObjectMapping; @@ -43,7 +44,7 @@ namespace Volo.Abp.IdentityServer public virtual async Task> FindApiScopesByNameAsync(IEnumerable scopeNames) { var scopes = await ApiScopeRepository.GetListByNameAsync(scopeNames.ToArray(), includeDetails: true); - return ObjectMapper.Map, List>(scopes); + return ObjectMapper.Map, List>(scopes); } /// @@ -76,7 +77,7 @@ namespace Volo.Abp.IdentityServer return new Resources( ObjectMapper.Map, List>(identityResources), ObjectMapper.Map, List>(apiResources), - ObjectMapper.Map, List>(apiScopes)); + ObjectMapper.Map, List>(apiScopes)); } } } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs index 1949238a3b..74ea53d9e0 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs @@ -83,16 +83,14 @@ namespace Volo.Abp.IdentityServer.ApiResources public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default) { - var scopeClaims = DbContext.Set().Where(sc => sc.ApiScopeId == id); - - foreach (var scopeClaim in scopeClaims) + var resourceClaims = DbContext.Set().Where(sc => sc.ApiResourceId == id); + foreach (var scopeClaim in resourceClaims) { - DbContext.Set().Remove(scopeClaim); + DbContext.Set().Remove(scopeClaim); } - var scopes = DbContext.Set().Where(s => s.ApiResourceId == id); - - foreach (var scope in scopes) + var resourceScopes = DbContext.Set().Where(s => s.ApiResourceId == id); + foreach (var scope in resourceScopes) { DbContext.Set().Remove(scope); } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiScopeRepository.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiScopeRepository.cs index 6df9f5b90a..87f67ec330 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiScopeRepository.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiScopeRepository.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.EntityFrameworkCore; namespace Volo.Abp.IdentityServer.ApiResources diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs index 93624174f9..7834db31fb 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IIdentityServerDbContext.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; @@ -12,20 +13,41 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore [ConnectionStringName(AbpIdentityServerDbProperties.ConnectionStringName)] public interface IIdentityServerDbContext : IEfCoreDbContext { + #region ApiResource + DbSet ApiResources { get; set; } - DbSet ApiSecrets { get; set; } + DbSet ApiResourceSecrets { get; set; } DbSet ApiResourceClaims { get; set; } - DbSet ApiScopes { get; set; } + DbSet ApiResourceScopes { get; set; } + + #endregion + + #region ApiScope + + DbSet ApiScopes { get; set; } DbSet ApiScopeClaims { get; set; } + DbSet ApiScopeProperties { get; set; } + + #endregion + + + #region IdentityResource + DbSet IdentityResources { get; set; } DbSet IdentityClaims { get; set; } + DbSet IdentityResourceProperties { get; set; } + + #endregion + + #region Client + DbSet Clients { get; set; } DbSet ClientGrantTypes { get; set; } @@ -46,6 +68,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore DbSet ClientProperties { get; set; } + #endregion + DbSet PersistedGrants { get; set; } DbSet DeviceFlowCodes { get; set; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs index 84ec1f802a..686d2e0ac1 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContext.cs @@ -2,6 +2,7 @@ using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; @@ -12,20 +13,41 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore [ConnectionStringName(AbpIdentityServerDbProperties.ConnectionStringName)] public class IdentityServerDbContext : AbpDbContext, IIdentityServerDbContext { + #region ApiResource + public DbSet ApiResources { get; set; } - public DbSet ApiSecrets { get; set; } + public DbSet ApiResourceSecrets { get; set; } public DbSet ApiResourceClaims { get; set; } - public DbSet ApiScopes { get; set; } + public DbSet ApiResourceScopes { get; set; } + + #endregion + + #region ApiScope + + public DbSet ApiScopes { get; set; } public DbSet ApiScopeClaims { get; set; } + public DbSet ApiScopeProperties { get; set; } + + #endregion + + + #region IdentityResource + public DbSet IdentityResources { get; set; } public DbSet IdentityClaims { get; set; } + public DbSet IdentityResourceProperties { get; set; } + + #endregion + + #region Client + public DbSet Clients { get; set; } public DbSet ClientGrantTypes { get; set; } @@ -46,6 +68,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore public DbSet ClientProperties { get; set; } + #endregion + public DbSet PersistedGrants { get; set; } public DbSet DeviceFlowCodes { get; set; } diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs index 54b91e9dcc..26b8036aba 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/EntityFrameworkCore/IdentityServerDbContextModelCreatingExtensions.cs @@ -6,10 +6,16 @@ using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.EntityFrameworkCore.ValueComparers; using Volo.Abp.EntityFrameworkCore.ValueConverters; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; using Volo.Abp.IdentityServer.IdentityResources; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; +using Client = Volo.Abp.IdentityServer.Clients.Client; +using ClientClaim = Volo.Abp.IdentityServer.Clients.ClientClaim; +using IdentityResource = Volo.Abp.IdentityServer.IdentityResources.IdentityResource; +using PersistedGrant = Volo.Abp.IdentityServer.Grants.PersistedGrant; namespace Volo.Abp.IdentityServer.EntityFrameworkCore { @@ -28,6 +34,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore optionsAction?.Invoke(options); + #region Client + builder.Entity(b => { b.ToTable(options.TablePrefix + "Clients", options.Schema); @@ -123,16 +131,16 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ClientId, x.Type, x.Value}); - b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); + b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) { - SecretConsts.ValueMaxLengthValue = 300; + ApiResourceSecretConsts.ValueMaxLengthValue = 300; } - b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); + b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLengthValue).IsRequired(); - b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); + b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); }); builder.Entity(b => @@ -206,6 +214,10 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasIndex(x => x.Expiration); }); + #endregion + + #region IdentityResource + builder.Entity(b => { b.ToTable(options.TablePrefix + "IdentityResources", options.Schema); @@ -216,6 +228,8 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.Property(x => x.DisplayName).HasMaxLength(IdentityResourceConsts.DisplayNameMaxLength); b.Property(x => x.Description).HasMaxLength(IdentityResourceConsts.DescriptionMaxLength); + b.HasIndex(x => x.Name).IsUnique(); + b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.IdentityResourceId).IsRequired(); }); @@ -239,11 +253,19 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.IdentityResourceId, x.Key}); - b.Property(x => x.Key).HasMaxLength(250).IsRequired(); - b.Property(x => x.Value).HasMaxLength(2000).IsRequired(); + b.Property(x => x.Key).HasMaxLength(IdentityResourcePropertyConsts.KeyMaxLength).IsRequired(); + if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) + { + IdentityResourcePropertyConsts.ValueMaxLengthValue = 300; + } + b.Property(x => x.Value).HasMaxLength(IdentityResourcePropertyConsts.ValueMaxLengthValue).IsRequired(); }); - builder.Entity(b => + #endregion + + #region ApiResource + + builder.Entity(b => { b.ToTable(options.TablePrefix + "ApiResources", options.Schema); @@ -269,15 +291,15 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiResourceId, x.Type, x.Value}); - b.Property(x => x.Type).HasMaxLength(SecretConsts.TypeMaxLength).IsRequired(); - b.Property(x => x.Description).HasMaxLength(SecretConsts.DescriptionMaxLength); + b.Property(x => x.Type).HasMaxLength(ApiResourceSecretConsts.TypeMaxLength).IsRequired(); + b.Property(x => x.Description).HasMaxLength(ApiResourceSecretConsts.DescriptionMaxLength); if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) { - SecretConsts.ValueMaxLengthValue = 300; + ApiResourceSecretConsts.ValueMaxLengthValue = 300; } - b.Property(x => x.Value).HasMaxLength(SecretConsts.ValueMaxLengthValue).IsRequired(); + b.Property(x => x.Value).HasMaxLength(ApiResourceSecretConsts.ValueMaxLengthValue).IsRequired(); }); builder.Entity(b => @@ -299,24 +321,28 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiResourceId, x.Scope}); - b.Property(x => x.Scope).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); + b.Property(x => x.Scope).HasMaxLength(ApiResourceScopeConsts.ScopeMaxLength).IsRequired(); }); + #endregion + + #region ApiScope + builder.Entity(b => { b.ToTable(options.TablePrefix + "ApiScopes", options.Schema); b.ConfigureByConvention(); - b.Property(x => x.Name).HasMaxLength(200).IsRequired(); - b.Property(x => x.DisplayName).HasMaxLength(200); - b.Property(x => x.Description).HasMaxLength(1000); + b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); + b.Property(x => x.DisplayName).HasMaxLength(ApiScopeConsts.DisplayNameMaxLength); + b.Property(x => x.Description).HasMaxLength(ApiScopeConsts.DescriptionMaxLength); b.HasIndex(x => x.Name).IsUnique(); b.HasMany(x => x.UserClaims).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); - //Identity Server does not configure the relationship of Properties + //TODO: Identity Server does not configure the relationship of Properties //b.HasMany(x => x.Properties).WithOne().HasForeignKey(x => x.ApiScopeId).IsRequired(); }); @@ -329,7 +355,7 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiScopeId, x.Name, x.Type}); b.Property(x => x.Type).HasMaxLength(UserClaimConsts.TypeMaxLength).IsRequired(); - b.Property(x => x.Name).HasMaxLength(ApiScopeConsts.NameMaxLength).IsRequired(); + b.Property(x => x.Name).HasMaxLength(ApiScopeClaimConsts.NameMaxLength).IsRequired(); }); builder.Entity(b => @@ -340,28 +366,42 @@ namespace Volo.Abp.IdentityServer.EntityFrameworkCore b.HasKey(x => new {x.ApiScopeId, x.Key}); - b.Property(x => x.Key).HasMaxLength(250).IsRequired(); - //oracle? - b.Property(x => x.Value).HasMaxLength(2000).IsRequired(); + b.Property(x => x.Key).HasMaxLength(ApiScopePropertyConsts.KeyMaxLength).IsRequired(); + if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql, EfCoreDatabaseProvider.Oracle)) + { + ApiScopePropertyConsts.ValueMaxLengthValue = 300; + } + b.Property(x => x.Value).HasMaxLength(ApiScopePropertyConsts.ValueMaxLengthValue).IsRequired(); }); + #endregion + + #region DeviceFlowCodes + builder.Entity(b => { b.ToTable(options.TablePrefix + "DeviceFlowCodes", options.Schema); b.ConfigureByConvention(); - b.Property(x => x.DeviceCode).HasMaxLength(200).IsRequired(); - b.Property(x => x.UserCode).HasMaxLength(200).IsRequired(); - b.Property(x => x.SubjectId).HasMaxLength(200); - b.Property(x => x.ClientId).HasMaxLength(200).IsRequired(); + b.Property(x => x.DeviceCode).HasMaxLength(DeviceFlowCodesConsts.DeviceCodeMaxLength).IsRequired(); + b.Property(x => x.UserCode).HasMaxLength(DeviceFlowCodesConsts.UserCodeMaxLength).IsRequired(); + b.Property(x => x.SubjectId).HasMaxLength(DeviceFlowCodesConsts.SubjectIdMaxLength); + b.Property(x => x.ClientId).HasMaxLength(DeviceFlowCodesConsts.ClientIdMaxLength).IsRequired(); b.Property(x => x.Expiration).IsRequired(); - b.Property(x => x.Data).HasMaxLength(50000).IsRequired(); + + if (IsDatabaseProvider(builder, options, EfCoreDatabaseProvider.MySql)) + { + DeviceFlowCodesConsts.DataMaxLengthValue = 10000; //TODO: MySQL accepts 20.000. We can consider to change in v3.0. + } + b.Property(x => x.Data).HasMaxLength(DeviceFlowCodesConsts.DataMaxLengthValue).IsRequired(); b.HasIndex(x => new {x.UserCode}).IsUnique(); b.HasIndex(x => x.DeviceCode).IsUnique(); b.HasIndex(x => x.Expiration); }); + + #endregion } private static bool IsDatabaseProvider( diff --git a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs index b4b5fe9b60..093f7434dc 100644 --- a/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs +++ b/modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/AbpIdentityServerMongoDbContext.cs @@ -1,6 +1,7 @@ using MongoDB.Driver; using Volo.Abp.Data; using Volo.Abp.IdentityServer.ApiResources; +using Volo.Abp.IdentityServer.ApiScopes; using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.Devices; using Volo.Abp.IdentityServer.Grants; @@ -14,6 +15,8 @@ namespace Volo.Abp.IdentityServer.MongoDB { public IMongoCollection ApiResources => Collection(); + public IMongoCollection ApiScopes => Collection(); + public IMongoCollection Clients => Collection(); public IMongoCollection IdentityResources => Collection();