Browse Source

use file-scoped namespacing for identity module

pull/10696/head
Ahmet Çotur 4 years ago
parent
commit
579d898ba1
  1. 63
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs
  2. 9
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/GetIdentityRolesInput.cs
  3. 9
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/GetIdentityUsersInput.cs
  4. 21
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs
  5. 29
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs
  6. 17
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserLookupAppService.cs
  7. 45
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityPermissionDefinitionProvider.cs
  8. 57
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityPermissions.cs
  9. 11
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRemoteServiceConsts.cs
  10. 9
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleCreateDto.cs
  11. 25
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleCreateOrUpdateDtoBase.cs
  12. 21
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleDto.cs
  13. 11
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleUpdateDto.cs
  14. 17
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs
  15. 45
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs
  16. 31
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs
  17. 19
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs
  18. 13
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateRolesDto.cs
  19. 11
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UserLookupCountInputDto.cs
  20. 11
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UserLookupSearchInputDto.cs
  21. 33
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs
  22. 17
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModuleAutoMapperProfile.cs
  23. 13
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityAppServiceBase.cs
  24. 149
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs
  25. 273
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs
  26. 85
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs
  27. 61
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs
  28. 15
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreOptions.cs
  29. 67
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs
  30. 37
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidatorCallback.cs
  31. 107
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs
  32. 17
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider.cs
  33. 47
      modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/SignInResultExtensions.cs
  34. 15
      modules/identity/src/Volo.Abp.Identity.Blazor.Server/AbpIdentityBlazorServerModule.cs
  35. 17
      modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/AbpIdentityBlazorWebAssemblyModule.cs
  36. 23
      modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs
  37. 87
      modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs
  38. 43
      modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs
  39. 13
      modules/identity/src/Volo.Abp.Identity.Blazor/IdentityMenuNames.cs
  40. 125
      modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs
  41. 11
      modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleNameComponent.razor.cs
  42. 227
      modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs
  43. 49
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs
  44. 9
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs
  45. 45
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs
  46. 27
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeEto.cs
  47. 15
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimValueType.cs
  48. 23
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs
  49. 11
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleClaimConsts.cs
  50. 25
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleConsts.cs
  51. 27
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleEto.cs
  52. 19
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleNameChangedEto.cs
  53. 35
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogActionConsts.cs
  54. 99
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogConsts.cs
  55. 13
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogIdentityConsts.cs
  56. 23
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserClaimConsts.cs
  57. 53
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs
  58. 35
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserLoginConsts.cs
  59. 23
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserTokenConsts.cs
  60. 13
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/LinkUserTokenProviderConsts.cs
  61. 11
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/IdentityResource.cs
  62. 39
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs
  63. 19
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitEto.cs
  64. 95
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Settings/IdentitySettingNames.cs
  65. 71
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs
  66. 21
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfigurationDictionaryExtensions.cs
  67. 23
      modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs
  68. 195
      modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/AbpIdentityResultExtensions.cs
  69. 49
      modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs
  70. 13
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDbProperties.cs
  71. 127
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs
  72. 15
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptions.cs
  73. 47
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsManager.cs
  74. 55
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityResultException.cs
  75. 201
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentitySettingDefinitionProvider.cs
  76. 103
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs
  77. 231
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs
  78. 19
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderDictionary.cs
  79. 32
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderInfo.cs
  80. 45
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginUserInfo.cs
  81. 51
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs
  82. 59
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIDentityClaimTypeRepository.cs
  83. 17
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityDataSeeder.cs
  84. 29
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityLinkUserRepository.cs
  85. 59
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs
  86. 69
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySecurityLogRepository.cs
  87. 167
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs
  88. 215
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs
  89. 101
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs
  90. 71
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs
  91. 49
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs
  92. 39
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeedContributor.cs
  93. 13
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeedResult.cs
  94. 153
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs
  95. 19
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDomainMappingProfile.cs
  96. 57
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs
  97. 19
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs
  98. 193
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserManager.cs
  99. 191
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs
  100. 75
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs

63
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs

@ -6,43 +6,42 @@ using Volo.Abp.PermissionManagement;
using Volo.Abp.Users;
using Volo.Abp.Threading;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[DependsOn(
typeof(AbpIdentityDomainSharedModule),
typeof(AbpUsersAbstractionModule),
typeof(AbpAuthorizationModule),
typeof(AbpPermissionManagementApplicationContractsModule)
)]
public class AbpIdentityApplicationContractsModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityDomainSharedModule),
typeof(AbpUsersAbstractionModule),
typeof(AbpAuthorizationModule),
typeof(AbpPermissionManagementApplicationContractsModule)
)]
public class AbpIdentityApplicationContractsModule : AbpModule
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context)
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
}
}
public override void PostConfigureServices(ServiceConfigurationContext context)
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
OneTimeRunner.Run(() =>
{
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToApi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
getApiTypes: new[] { typeof(IdentityRoleDto) },
createApiTypes: new[] { typeof(IdentityRoleCreateDto) },
updateApiTypes: new[] { typeof(IdentityRoleUpdateDto) }
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToApi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
getApiTypes: new[] { typeof(IdentityRoleDto) },
createApiTypes: new[] { typeof(IdentityRoleCreateDto) },
updateApiTypes: new[] { typeof(IdentityRoleUpdateDto) }
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToApi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
getApiTypes: new[] { typeof(IdentityUserDto) },
createApiTypes: new[] { typeof(IdentityUserCreateDto) },
updateApiTypes: new[] { typeof(IdentityUserUpdateDto) }
);
});
}
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToApi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
getApiTypes: new[] { typeof(IdentityUserDto) },
createApiTypes: new[] { typeof(IdentityUserCreateDto) },
updateApiTypes: new[] { typeof(IdentityUserUpdateDto) }
);
});
}
}

9
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/GetIdentityRolesInput.cs

@ -1,9 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class GetIdentityRolesInput : PagedAndSortedResultRequestDto
{
public class GetIdentityRolesInput : PagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}
public string Filter { get; set; }
}

9
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/GetIdentityUsersInput.cs

@ -1,9 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class GetIdentityUsersInput : PagedAndSortedResultRequestDto
{
public class GetIdentityUsersInput : PagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}
public string Filter { get; set; }
}

21
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityRoleAppService.cs

@ -3,16 +3,15 @@ using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityRoleAppService
: ICrudAppService<
IdentityRoleDto,
Guid,
GetIdentityRolesInput,
IdentityRoleCreateDto,
IdentityRoleUpdateDto>
{
public interface IIdentityRoleAppService
: ICrudAppService<
IdentityRoleDto,
Guid,
GetIdentityRolesInput,
IdentityRoleCreateDto,
IdentityRoleUpdateDto>
{
Task<ListResultDto<IdentityRoleDto>> GetAllListAsync();
}
Task<ListResultDto<IdentityRoleDto>> GetAllListAsync();
}

29
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserAppService.cs

@ -3,24 +3,23 @@ using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityUserAppService
: ICrudAppService<
IdentityUserDto,
Guid,
GetIdentityUsersInput,
IdentityUserCreateDto,
IdentityUserUpdateDto>
{
public interface IIdentityUserAppService
: ICrudAppService<
IdentityUserDto,
Guid,
GetIdentityUsersInput,
IdentityUserCreateDto,
IdentityUserUpdateDto>
{
Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id);
Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id);
Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync();
Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync();
Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input);
Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input);
Task<IdentityUserDto> FindByUsernameAsync(string userName);
Task<IdentityUserDto> FindByUsernameAsync(string userName);
Task<IdentityUserDto> FindByEmailAsync(string email);
}
Task<IdentityUserDto> FindByEmailAsync(string email);
}

17
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserLookupAppService.cs

@ -4,16 +4,15 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityUserLookupAppService : IApplicationService
{
public interface IIdentityUserLookupAppService : IApplicationService
{
Task<UserData> FindByIdAsync(Guid id);
Task<UserData> FindByIdAsync(Guid id);
Task<UserData> FindByUserNameAsync(string userName);
Task<UserData> FindByUserNameAsync(string userName);
Task<ListResultDto<UserData>> SearchAsync(UserLookupSearchInputDto input);
Task<ListResultDto<UserData>> SearchAsync(UserLookupSearchInputDto input);
Task<long> GetCountAsync(UserLookupCountInputDto input);
}
Task<long> GetCountAsync(UserLookupCountInputDto input);
}

45
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityPermissionDefinitionProvider.cs

@ -2,34 +2,33 @@
using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityPermissionDefinitionProvider : PermissionDefinitionProvider
{
public class IdentityPermissionDefinitionProvider : PermissionDefinitionProvider
public override void Define(IPermissionDefinitionContext context)
{
public override void Define(IPermissionDefinitionContext context)
{
var identityGroup = context.AddGroup(IdentityPermissions.GroupName, L("Permission:IdentityManagement"));
var identityGroup = context.AddGroup(IdentityPermissions.GroupName, L("Permission:IdentityManagement"));
var rolesPermission = identityGroup.AddPermission(IdentityPermissions.Roles.Default, L("Permission:RoleManagement"));
rolesPermission.AddChild(IdentityPermissions.Roles.Create, L("Permission:Create"));
rolesPermission.AddChild(IdentityPermissions.Roles.Update, L("Permission:Edit"));
rolesPermission.AddChild(IdentityPermissions.Roles.Delete, L("Permission:Delete"));
rolesPermission.AddChild(IdentityPermissions.Roles.ManagePermissions, L("Permission:ChangePermissions"));
var rolesPermission = identityGroup.AddPermission(IdentityPermissions.Roles.Default, L("Permission:RoleManagement"));
rolesPermission.AddChild(IdentityPermissions.Roles.Create, L("Permission:Create"));
rolesPermission.AddChild(IdentityPermissions.Roles.Update, L("Permission:Edit"));
rolesPermission.AddChild(IdentityPermissions.Roles.Delete, L("Permission:Delete"));
rolesPermission.AddChild(IdentityPermissions.Roles.ManagePermissions, L("Permission:ChangePermissions"));
var usersPermission = identityGroup.AddPermission(IdentityPermissions.Users.Default, L("Permission:UserManagement"));
usersPermission.AddChild(IdentityPermissions.Users.Create, L("Permission:Create"));
usersPermission.AddChild(IdentityPermissions.Users.Update, L("Permission:Edit"));
usersPermission.AddChild(IdentityPermissions.Users.Delete, L("Permission:Delete"));
usersPermission.AddChild(IdentityPermissions.Users.ManagePermissions, L("Permission:ChangePermissions"));
var usersPermission = identityGroup.AddPermission(IdentityPermissions.Users.Default, L("Permission:UserManagement"));
usersPermission.AddChild(IdentityPermissions.Users.Create, L("Permission:Create"));
usersPermission.AddChild(IdentityPermissions.Users.Update, L("Permission:Edit"));
usersPermission.AddChild(IdentityPermissions.Users.Delete, L("Permission:Delete"));
usersPermission.AddChild(IdentityPermissions.Users.ManagePermissions, L("Permission:ChangePermissions"));
identityGroup
.AddPermission(IdentityPermissions.UserLookup.Default, L("Permission:UserLookup"))
.WithProviders(ClientPermissionValueProvider.ProviderName);
}
identityGroup
.AddPermission(IdentityPermissions.UserLookup.Default, L("Permission:UserLookup"))
.WithProviders(ClientPermissionValueProvider.ProviderName);
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<IdentityResource>(name);
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<IdentityResource>(name);
}
}

57
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityPermissions.cs

@ -1,37 +1,36 @@
using Volo.Abp.Reflection;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityPermissions
{
public static class IdentityPermissions
{
public const string GroupName = "AbpIdentity";
public const string GroupName = "AbpIdentity";
public static class Roles
{
public const string Default = GroupName + ".Roles";
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string ManagePermissions = Default + ".ManagePermissions";
}
public static class Roles
{
public const string Default = GroupName + ".Roles";
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string ManagePermissions = Default + ".ManagePermissions";
}
public static class Users
{
public const string Default = GroupName + ".Users";
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string ManagePermissions = Default + ".ManagePermissions";
}
public static class Users
{
public const string Default = GroupName + ".Users";
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string ManagePermissions = Default + ".ManagePermissions";
}
public static class UserLookup
{
public const string Default = GroupName + ".UserLookup";
}
public static class UserLookup
{
public const string Default = GroupName + ".UserLookup";
}
public static string[] GetAll()
{
return ReflectionHelper.GetPublicConstantsRecursively(typeof(IdentityPermissions));
}
public static string[] GetAll()
{
return ReflectionHelper.GetPublicConstantsRecursively(typeof(IdentityPermissions));
}
}
}

11
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRemoteServiceConsts.cs

@ -1,9 +1,8 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityRemoteServiceConsts
{
public static class IdentityRemoteServiceConsts
{
public const string RemoteServiceName = "AbpIdentity";
public const string RemoteServiceName = "AbpIdentity";
public const string ModuleName = "identity";
}
public const string ModuleName = "identity";
}

9
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleCreateDto.cs

@ -1,7 +1,6 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityRoleCreateDto : IdentityRoleCreateOrUpdateDtoBase
{
public class IdentityRoleCreateDto : IdentityRoleCreateOrUpdateDtoBase
{
}
}
}

25
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleCreateOrUpdateDtoBase.cs

@ -2,21 +2,20 @@
using Volo.Abp.ObjectExtending;
using Volo.Abp.Validation;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityRoleCreateOrUpdateDtoBase : ExtensibleObject
{
public class IdentityRoleCreateOrUpdateDtoBase : ExtensibleObject
{
[Required]
[DynamicStringLength(typeof(IdentityRoleConsts), nameof(IdentityRoleConsts.MaxNameLength))]
public string Name { get; set; }
[Required]
[DynamicStringLength(typeof(IdentityRoleConsts), nameof(IdentityRoleConsts.MaxNameLength))]
public string Name { get; set; }
public bool IsDefault { get; set; }
public bool IsDefault { get; set; }
public bool IsPublic { get; set; }
public bool IsPublic { get; set; }
protected IdentityRoleCreateOrUpdateDtoBase() : base(false)
{
protected IdentityRoleCreateOrUpdateDtoBase() : base(false)
{
}
}
}
}

21
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleDto.cs

@ -2,18 +2,17 @@
using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityRoleDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
public class IdentityRoleDto : ExtensibleEntityDto<Guid>, IHasConcurrencyStamp
{
public string Name { get; set; }
public string Name { get; set; }
public bool IsDefault { get; set; }
public bool IsDefault { get; set; }
public bool IsStatic { get; set; }
public bool IsStatic { get; set; }
public bool IsPublic { get; set; }
public bool IsPublic { get; set; }
public string ConcurrencyStamp { get; set; }
}
}
public string ConcurrencyStamp { get; set; }
}

11
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityRoleUpdateDto.cs

@ -1,9 +1,8 @@
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityRoleUpdateDto : IdentityRoleCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
public class IdentityRoleUpdateDto : IdentityRoleCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
public string ConcurrencyStamp { get; set; }
}
}
public string ConcurrencyStamp { get; set; }
}

17
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateDto.cs

@ -2,13 +2,12 @@ using System.ComponentModel.DataAnnotations;
using Volo.Abp.Auditing;
using Volo.Abp.Validation;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityUserCreateDto : IdentityUserCreateOrUpdateDtoBase
{
public class IdentityUserCreateDto : IdentityUserCreateOrUpdateDtoBase
{
[DisableAuditing]
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))]
public string Password { get; set; }
}
}
[DisableAuditing]
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))]
public string Password { get; set; }
}

45
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs

@ -4,38 +4,37 @@ using JetBrains.Annotations;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Validation;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public abstract class IdentityUserCreateOrUpdateDtoBase : ExtensibleObject
{
public abstract class IdentityUserCreateOrUpdateDtoBase : ExtensibleObject
{
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxUserNameLength))]
public string UserName { get; set; }
[Required]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxUserNameLength))]
public string UserName { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxNameLength))]
public string Name { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxNameLength))]
public string Name { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxSurnameLength))]
public string Surname { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxSurnameLength))]
public string Surname { get; set; }
[Required]
[EmailAddress]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxEmailLength))]
public string Email { get; set; }
[Required]
[EmailAddress]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxEmailLength))]
public string Email { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))]
public string PhoneNumber { get; set; }
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))]
public string PhoneNumber { get; set; }
public bool IsActive { get; set; }
public bool IsActive { get; set; }
public bool LockoutEnabled { get; set; }
public bool LockoutEnabled { get; set; }
[CanBeNull]
public string[] RoleNames { get; set; }
[CanBeNull]
public string[] RoleNames { get; set; }
protected IdentityUserCreateOrUpdateDtoBase() : base(false)
{
protected IdentityUserCreateOrUpdateDtoBase() : base(false)
{
}
}
}

31
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs

@ -3,32 +3,31 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Domain.Entities;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityUserDto : ExtensibleFullAuditedEntityDto<Guid>, IMultiTenant, IHasConcurrencyStamp
{
public class IdentityUserDto : ExtensibleFullAuditedEntityDto<Guid>, IMultiTenant, IHasConcurrencyStamp
{
public Guid? TenantId { get; set; }
public Guid? TenantId { get; set; }
public string UserName { get; set; }
public string UserName { get; set; }
public string Name { get; set; }
public string Name { get; set; }
public string Surname { get; set; }
public string Surname { get; set; }
public string Email { get; set; }
public string Email { get; set; }
public bool EmailConfirmed { get; set; }
public bool EmailConfirmed { get; set; }
public string PhoneNumber { get; set; }
public string PhoneNumber { get; set; }
public bool PhoneNumberConfirmed { get; set; }
public bool PhoneNumberConfirmed { get; set; }
public bool IsActive { get; set; }
public bool IsActive { get; set; }
public bool LockoutEnabled { get; set; }
public bool LockoutEnabled { get; set; }
public DateTimeOffset? LockoutEnd { get; set; }
public DateTimeOffset? LockoutEnd { get; set; }
public string ConcurrencyStamp { get; set; }
}
public string ConcurrencyStamp { get; set; }
}

19
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateDto.cs

@ -3,14 +3,13 @@ using Volo.Abp.Auditing;
using Volo.Abp.Domain.Entities;
using Volo.Abp.Validation;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityUserUpdateDto : IdentityUserCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
public class IdentityUserUpdateDto : IdentityUserCreateOrUpdateDtoBase, IHasConcurrencyStamp
{
[DisableAuditing]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))]
public string Password { get; set; }
public string ConcurrencyStamp { get; set; }
}
}
[DisableAuditing]
[DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPasswordLength))]
public string Password { get; set; }
public string ConcurrencyStamp { get; set; }
}

13
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserUpdateRolesDto.cs

@ -1,10 +1,9 @@
using System.ComponentModel.DataAnnotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityUserUpdateRolesDto
{
public class IdentityUserUpdateRolesDto
{
[Required]
public string[] RoleNames { get; set; }
}
}
[Required]
public string[] RoleNames { get; set; }
}

11
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UserLookupCountInputDto.cs

@ -1,7 +1,6 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class UserLookupCountInputDto
{
public class UserLookupCountInputDto
{
public string Filter { get; set; }
}
}
public string Filter { get; set; }
}

11
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/UserLookupSearchInputDto.cs

@ -1,9 +1,8 @@
using Volo.Abp.Application.Dtos;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class UserLookupSearchInputDto : PagedAndSortedResultRequestDto
{
public class UserLookupSearchInputDto : PagedAndSortedResultRequestDto
{
public string Filter { get; set; }
}
}
public string Filter { get; set; }
}

33
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModule.cs

@ -3,24 +3,23 @@ using Volo.Abp.AutoMapper;
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[DependsOn(
typeof(AbpIdentityDomainModule),
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule),
typeof(AbpPermissionManagementApplicationModule)
)]
public class AbpIdentityApplicationModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityDomainModule),
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule),
typeof(AbpPermissionManagementApplicationModule)
)]
public class AbpIdentityApplicationModule : AbpModule
public override void ConfigureServices(ServiceConfigurationContext context)
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAutoMapperObjectMapper<AbpIdentityApplicationModule>();
context.Services.AddAutoMapperObjectMapper<AbpIdentityApplicationModule>();
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<AbpIdentityApplicationModuleAutoMapperProfile>(validate: true);
});
}
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<AbpIdentityApplicationModuleAutoMapperProfile>(validate: true);
});
}
}
}

17
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/AbpIdentityApplicationModuleAutoMapperProfile.cs

@ -1,16 +1,15 @@
using AutoMapper;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class AbpIdentityApplicationModuleAutoMapperProfile : Profile
{
public class AbpIdentityApplicationModuleAutoMapperProfile : Profile
public AbpIdentityApplicationModuleAutoMapperProfile()
{
public AbpIdentityApplicationModuleAutoMapperProfile()
{
CreateMap<IdentityUser, IdentityUserDto>()
.MapExtraProperties();
CreateMap<IdentityUser, IdentityUserDto>()
.MapExtraProperties();
CreateMap<IdentityRole, IdentityRoleDto>()
.MapExtraProperties();
}
CreateMap<IdentityRole, IdentityRoleDto>()
.MapExtraProperties();
}
}

13
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityAppServiceBase.cs

@ -1,14 +1,13 @@
using Volo.Abp.Application.Services;
using Volo.Abp.Identity.Localization;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public abstract class IdentityAppServiceBase : ApplicationService
{
public abstract class IdentityAppServiceBase : ApplicationService
protected IdentityAppServiceBase()
{
protected IdentityAppServiceBase()
{
ObjectMapperContext = typeof(AbpIdentityApplicationModule);
LocalizationResource = typeof(IdentityResource);
}
ObjectMapperContext = typeof(AbpIdentityApplicationModule);
LocalizationResource = typeof(IdentityResource);
}
}

149
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityRoleAppService.cs

@ -7,99 +7,98 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Authorize(IdentityPermissions.Roles.Default)]
public class IdentityRoleAppService : IdentityAppServiceBase, IIdentityRoleAppService
{
[Authorize(IdentityPermissions.Roles.Default)]
public class IdentityRoleAppService : IdentityAppServiceBase, IIdentityRoleAppService
protected IdentityRoleManager RoleManager { get; }
protected IIdentityRoleRepository RoleRepository { get; }
public IdentityRoleAppService(
IdentityRoleManager roleManager,
IIdentityRoleRepository roleRepository)
{
protected IdentityRoleManager RoleManager { get; }
protected IIdentityRoleRepository RoleRepository { get; }
RoleManager = roleManager;
RoleRepository = roleRepository;
}
public IdentityRoleAppService(
IdentityRoleManager roleManager,
IIdentityRoleRepository roleRepository)
{
RoleManager = roleManager;
RoleRepository = roleRepository;
}
public virtual async Task<IdentityRoleDto> GetAsync(Guid id)
{
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(
await RoleManager.GetByIdAsync(id)
);
}
public virtual async Task<IdentityRoleDto> GetAsync(Guid id)
{
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(
await RoleManager.GetByIdAsync(id)
);
}
public virtual async Task<ListResultDto<IdentityRoleDto>> GetAllListAsync()
{
var list = await RoleRepository.GetListAsync();
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list)
);
}
public virtual async Task<ListResultDto<IdentityRoleDto>> GetAllListAsync()
{
var list = await RoleRepository.GetListAsync();
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list)
public virtual async Task<PagedResultDto<IdentityRoleDto>> GetListAsync(GetIdentityRolesInput input)
{
var list = await RoleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter);
var totalCount = await RoleRepository.GetCountAsync(input.Filter);
return new PagedResultDto<IdentityRoleDto>(
totalCount,
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list)
);
}
}
public virtual async Task<PagedResultDto<IdentityRoleDto>> GetListAsync(GetIdentityRolesInput input)
[Authorize(IdentityPermissions.Roles.Create)]
public virtual async Task<IdentityRoleDto> CreateAsync(IdentityRoleCreateDto input)
{
var role = new IdentityRole(
GuidGenerator.Create(),
input.Name,
CurrentTenant.Id
)
{
var list = await RoleRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter);
var totalCount = await RoleRepository.GetCountAsync(input.Filter);
IsDefault = input.IsDefault,
IsPublic = input.IsPublic
};
return new PagedResultDto<IdentityRoleDto>(
totalCount,
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list)
);
}
input.MapExtraPropertiesTo(role);
[Authorize(IdentityPermissions.Roles.Create)]
public virtual async Task<IdentityRoleDto> CreateAsync(IdentityRoleCreateDto input)
{
var role = new IdentityRole(
GuidGenerator.Create(),
input.Name,
CurrentTenant.Id
)
{
IsDefault = input.IsDefault,
IsPublic = input.IsPublic
};
input.MapExtraPropertiesTo(role);
(await RoleManager.CreateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
(await RoleManager.CreateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
[Authorize(IdentityPermissions.Roles.Update)]
public virtual async Task<IdentityRoleDto> UpdateAsync(Guid id, IdentityRoleUpdateDto input)
{
var role = await RoleManager.GetByIdAsync(id);
role.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
(await RoleManager.SetRoleNameAsync(role, input.Name)).CheckErrors();
[Authorize(IdentityPermissions.Roles.Update)]
public virtual async Task<IdentityRoleDto> UpdateAsync(Guid id, IdentityRoleUpdateDto input)
{
var role = await RoleManager.GetByIdAsync(id);
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
role.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
input.MapExtraPropertiesTo(role);
(await RoleManager.SetRoleNameAsync(role, input.Name)).CheckErrors();
(await RoleManager.UpdateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
role.IsDefault = input.IsDefault;
role.IsPublic = input.IsPublic;
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
input.MapExtraPropertiesTo(role);
[Authorize(IdentityPermissions.Roles.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
var role = await RoleManager.FindByIdAsync(id.ToString());
if (role == null)
{
return;
}
(await RoleManager.UpdateAsync(role)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityRole, IdentityRoleDto>(role);
}
(await RoleManager.DeleteAsync(role)).CheckErrors();
[Authorize(IdentityPermissions.Roles.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
var role = await RoleManager.FindByIdAsync(id.ToString());
if (role == null)
{
return;
}
(await RoleManager.DeleteAsync(role)).CheckErrors();
}
}

273
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs

@ -8,181 +8,180 @@ using Volo.Abp.Application.Dtos;
using Volo.Abp.Data;
using Volo.Abp.ObjectExtending;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppService
{
public class IdentityUserAppService : IdentityAppServiceBase, IIdentityUserAppService
protected IdentityUserManager UserManager { get; }
protected IIdentityUserRepository UserRepository { get; }
protected IIdentityRoleRepository RoleRepository { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
public IdentityUserAppService(
IdentityUserManager userManager,
IIdentityUserRepository userRepository,
IIdentityRoleRepository roleRepository,
IOptions<IdentityOptions> identityOptions)
{
protected IdentityUserManager UserManager { get; }
protected IIdentityUserRepository UserRepository { get; }
protected IIdentityRoleRepository RoleRepository { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
public IdentityUserAppService(
IdentityUserManager userManager,
IIdentityUserRepository userRepository,
IIdentityRoleRepository roleRepository,
IOptions<IdentityOptions> identityOptions)
{
UserManager = userManager;
UserRepository = userRepository;
RoleRepository = roleRepository;
IdentityOptions = identityOptions;
}
UserManager = userManager;
UserRepository = userRepository;
RoleRepository = roleRepository;
IdentityOptions = identityOptions;
}
//TODO: [Authorize(IdentityPermissions.Users.Default)] should go the IdentityUserAppService class.
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> GetAsync(Guid id)
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.GetByIdAsync(id)
);
}
//TODO: [Authorize(IdentityPermissions.Users.Default)] should go the IdentityUserAppService class.
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> GetAsync(Guid id)
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.GetByIdAsync(id)
);
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<PagedResultDto<IdentityUserDto>> GetListAsync(GetIdentityUsersInput input)
{
var count = await UserRepository.GetCountAsync(input.Filter);
var list = await UserRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter);
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<PagedResultDto<IdentityUserDto>> GetListAsync(GetIdentityUsersInput input)
{
var count = await UserRepository.GetCountAsync(input.Filter);
var list = await UserRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter);
return new PagedResultDto<IdentityUserDto>(
count,
ObjectMapper.Map<List<IdentityUser>, List<IdentityUserDto>>(list)
);
}
return new PagedResultDto<IdentityUserDto>(
count,
ObjectMapper.Map<List<IdentityUser>, List<IdentityUserDto>>(list)
);
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id)
{
//TODO: Should also include roles of the related OUs.
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<ListResultDto<IdentityRoleDto>> GetRolesAsync(Guid id)
{
//TODO: Should also include roles of the related OUs.
var roles = await UserRepository.GetRolesAsync(id);
var roles = await UserRepository.GetRolesAsync(id);
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(roles)
);
}
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(roles)
);
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync()
{
var list = await RoleRepository.GetListAsync();
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list));
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<ListResultDto<IdentityRoleDto>> GetAssignableRolesAsync()
{
var list = await RoleRepository.GetListAsync();
return new ListResultDto<IdentityRoleDto>(
ObjectMapper.Map<List<IdentityRole>, List<IdentityRoleDto>>(list));
}
[Authorize(IdentityPermissions.Users.Create)]
public virtual async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{
await IdentityOptions.SetAsync();
[Authorize(IdentityPermissions.Users.Create)]
public virtual async Task<IdentityUserDto> CreateAsync(IdentityUserCreateDto input)
{
await IdentityOptions.SetAsync();
var user = new IdentityUser(
GuidGenerator.Create(),
input.UserName,
input.Email,
CurrentTenant.Id
);
var user = new IdentityUser(
GuidGenerator.Create(),
input.UserName,
input.Email,
CurrentTenant.Id
);
input.MapExtraPropertiesTo(user);
input.MapExtraPropertiesTo(user);
(await UserManager.CreateAsync(user, input.Password)).CheckErrors();
await UpdateUserByInput(user, input);
(await UserManager.UpdateAsync(user)).CheckErrors();
(await UserManager.CreateAsync(user, input.Password)).CheckErrors();
await UpdateUserByInput(user, input);
(await UserManager.UpdateAsync(user)).CheckErrors();
await CurrentUnitOfWork.SaveChangesAsync();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
[Authorize(IdentityPermissions.Users.Update)]
public virtual async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
{
await IdentityOptions.SetAsync();
[Authorize(IdentityPermissions.Users.Update)]
public virtual async Task<IdentityUserDto> UpdateAsync(Guid id, IdentityUserUpdateDto input)
{
await IdentityOptions.SetAsync();
var user = await UserManager.GetByIdAsync(id);
var user = await UserManager.GetByIdAsync(id);
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
user.SetConcurrencyStampIfNotNull(input.ConcurrencyStamp);
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
(await UserManager.SetUserNameAsync(user, input.UserName)).CheckErrors();
await UpdateUserByInput(user, input);
input.MapExtraPropertiesTo(user);
await UpdateUserByInput(user, input);
input.MapExtraPropertiesTo(user);
(await UserManager.UpdateAsync(user)).CheckErrors();
(await UserManager.UpdateAsync(user)).CheckErrors();
if (!input.Password.IsNullOrEmpty())
{
(await UserManager.RemovePasswordAsync(user)).CheckErrors();
(await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
if (!input.Password.IsNullOrEmpty())
{
(await UserManager.RemovePasswordAsync(user)).CheckErrors();
(await UserManager.AddPasswordAsync(user, input.Password)).CheckErrors();
}
await CurrentUnitOfWork.SaveChangesAsync();
await CurrentUnitOfWork.SaveChangesAsync();
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(user);
}
[Authorize(IdentityPermissions.Users.Delete)]
public virtual async Task DeleteAsync(Guid id)
[Authorize(IdentityPermissions.Users.Delete)]
public virtual async Task DeleteAsync(Guid id)
{
if (CurrentUser.Id == id)
{
if (CurrentUser.Id == id)
{
throw new BusinessException(code: IdentityErrorCodes.UserSelfDeletion);
}
var user = await UserManager.FindByIdAsync(id.ToString());
if (user == null)
{
return;
}
(await UserManager.DeleteAsync(user)).CheckErrors();
throw new BusinessException(code: IdentityErrorCodes.UserSelfDeletion);
}
[Authorize(IdentityPermissions.Users.Update)]
public virtual async Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input)
var user = await UserManager.FindByIdAsync(id.ToString());
if (user == null)
{
var user = await UserManager.GetByIdAsync(id);
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors();
await UserRepository.UpdateAsync(user);
return;
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> FindByUsernameAsync(string userName)
(await UserManager.DeleteAsync(user)).CheckErrors();
}
[Authorize(IdentityPermissions.Users.Update)]
public virtual async Task UpdateRolesAsync(Guid id, IdentityUserUpdateRolesDto input)
{
var user = await UserManager.GetByIdAsync(id);
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors();
await UserRepository.UpdateAsync(user);
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> FindByUsernameAsync(string userName)
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.FindByNameAsync(userName)
);
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> FindByEmailAsync(string email)
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.FindByEmailAsync(email)
);
}
protected virtual async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input)
{
if (!string.Equals(user.Email, input.Email, StringComparison.InvariantCultureIgnoreCase))
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.FindByNameAsync(userName)
);
(await UserManager.SetEmailAsync(user, input.Email)).CheckErrors();
}
[Authorize(IdentityPermissions.Users.Default)]
public virtual async Task<IdentityUserDto> FindByEmailAsync(string email)
if (!string.Equals(user.PhoneNumber, input.PhoneNumber, StringComparison.InvariantCultureIgnoreCase))
{
return ObjectMapper.Map<IdentityUser, IdentityUserDto>(
await UserManager.FindByEmailAsync(email)
);
(await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors();
}
protected virtual async Task UpdateUserByInput(IdentityUser user, IdentityUserCreateOrUpdateDtoBase input)
(await UserManager.SetLockoutEnabledAsync(user, input.LockoutEnabled)).CheckErrors();
user.Name = input.Name;
user.Surname = input.Surname;
(await UserManager.UpdateAsync(user)).CheckErrors();
user.SetIsActive(input.IsActive);
if (input.RoleNames != null)
{
if (!string.Equals(user.Email, input.Email, StringComparison.InvariantCultureIgnoreCase))
{
(await UserManager.SetEmailAsync(user, input.Email)).CheckErrors();
}
if (!string.Equals(user.PhoneNumber, input.PhoneNumber, StringComparison.InvariantCultureIgnoreCase))
{
(await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors();
}
(await UserManager.SetLockoutEnabledAsync(user, input.LockoutEnabled)).CheckErrors();
user.Name = input.Name;
user.Surname = input.Surname;
(await UserManager.UpdateAsync(user)).CheckErrors();
user.SetIsActive(input.IsActive);
if (input.RoleNames != null)
{
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors();
}
(await UserManager.SetRolesAsync(user, input.RoleNames)).CheckErrors();
}
}
}

85
modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs

@ -5,60 +5,59 @@ using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Authorize(IdentityPermissions.UserLookup.Default)]
public class IdentityUserLookupAppService : IdentityAppServiceBase, IIdentityUserLookupAppService
{
[Authorize(IdentityPermissions.UserLookup.Default)]
public class IdentityUserLookupAppService : IdentityAppServiceBase, IIdentityUserLookupAppService
protected IdentityUserRepositoryExternalUserLookupServiceProvider UserLookupServiceProvider { get; }
public IdentityUserLookupAppService(
IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider)
{
protected IdentityUserRepositoryExternalUserLookupServiceProvider UserLookupServiceProvider { get; }
UserLookupServiceProvider = userLookupServiceProvider;
}
public IdentityUserLookupAppService(
IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider)
public virtual async Task<UserData> FindByIdAsync(Guid id)
{
var userData = await UserLookupServiceProvider.FindByIdAsync(id);
if (userData == null)
{
UserLookupServiceProvider = userLookupServiceProvider;
return null;
}
public virtual async Task<UserData> FindByIdAsync(Guid id)
{
var userData = await UserLookupServiceProvider.FindByIdAsync(id);
if (userData == null)
{
return null;
}
return new UserData(userData);
}
return new UserData(userData);
}
public virtual async Task<UserData> FindByUserNameAsync(string userName)
public virtual async Task<UserData> FindByUserNameAsync(string userName)
{
var userData = await UserLookupServiceProvider.FindByUserNameAsync(userName);
if (userData == null)
{
var userData = await UserLookupServiceProvider.FindByUserNameAsync(userName);
if (userData == null)
{
return null;
}
return new UserData(userData);
return null;
}
public async Task<ListResultDto<UserData>> SearchAsync(UserLookupSearchInputDto input)
{
var users = await UserLookupServiceProvider.SearchAsync(
input.Sorting,
input.Filter,
input.MaxResultCount,
input.SkipCount
);
return new UserData(userData);
}
return new ListResultDto<UserData>(
users
.Select(u => new UserData(u))
.ToList()
);
}
public async Task<ListResultDto<UserData>> SearchAsync(UserLookupSearchInputDto input)
{
var users = await UserLookupServiceProvider.SearchAsync(
input.Sorting,
input.Filter,
input.MaxResultCount,
input.SkipCount
);
return new ListResultDto<UserData>(
users
.Select(u => new UserData(u))
.ToList()
);
}
public async Task<long> GetCountAsync(UserLookupCountInputDto input)
{
return await UserLookupServiceProvider.GetCountAsync(input.Filter);
}
public async Task<long> GetCountAsync(UserLookupCountInputDto input)
{
return await UserLookupServiceProvider.GetCountAsync(input.Filter);
}
}

61
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs

@ -2,43 +2,42 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
[DependsOn(
typeof(AbpIdentityDomainModule)
)]
public class AbpIdentityAspNetCoreModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityDomainModule)
)]
public class AbpIdentityAspNetCoreModule : AbpModule
public override void PreConfigureServices(ServiceConfigurationContext context)
{
public override void PreConfigureServices(ServiceConfigurationContext context)
PreConfigure<IdentityBuilder>(builder =>
{
PreConfigure<IdentityBuilder>(builder =>
{
builder
.AddDefaultTokenProviders()
.AddTokenProvider<LinkUserTokenProvider>(LinkUserTokenProviderConsts.LinkUserTokenProviderName)
.AddSignInManager<AbpSignInManager>();
});
}
builder
.AddDefaultTokenProviders()
.AddTokenProvider<LinkUserTokenProvider>(LinkUserTokenProviderConsts.LinkUserTokenProviderName)
.AddSignInManager<AbpSignInManager>();
});
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
//(TODO: Extract an extension method like IdentityBuilder.AddAbpSecurityStampValidator())
context.Services.AddScoped<AbpSecurityStampValidator>();
context.Services.AddScoped(typeof(SecurityStampValidator<IdentityUser>), provider => provider.GetService(typeof(AbpSecurityStampValidator)));
context.Services.AddScoped(typeof(ISecurityStampValidator), provider => provider.GetService(typeof(AbpSecurityStampValidator)));
public override void ConfigureServices(ServiceConfigurationContext context)
{
//(TODO: Extract an extension method like IdentityBuilder.AddAbpSecurityStampValidator())
context.Services.AddScoped<AbpSecurityStampValidator>();
context.Services.AddScoped(typeof(SecurityStampValidator<IdentityUser>), provider => provider.GetService(typeof(AbpSecurityStampValidator)));
context.Services.AddScoped(typeof(ISecurityStampValidator), provider => provider.GetService(typeof(AbpSecurityStampValidator)));
var options = context.Services.ExecutePreConfiguredActions(new AbpIdentityAspNetCoreOptions());
var options = context.Services.ExecutePreConfiguredActions(new AbpIdentityAspNetCoreOptions());
if (options.ConfigureAuthentication)
{
context.Services
.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies();
}
if (options.ConfigureAuthentication)
{
context.Services
.AddAuthentication(o =>
{
o.DefaultScheme = IdentityConstants.ApplicationScheme;
o.DefaultSignInScheme = IdentityConstants.ExternalScheme;
})
.AddIdentityCookies();
}
}
}

15
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreOptions.cs

@ -1,10 +1,9 @@
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public class AbpIdentityAspNetCoreOptions
{
public class AbpIdentityAspNetCoreOptions
{
/// <summary>
/// Default: true.
/// </summary>
public bool ConfigureAuthentication { get; set; } = true;
}
/// <summary>
/// Default: true.
/// </summary>
public bool ConfigureAuthentication { get; set; } = true;
}

67
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidator.cs

@ -8,47 +8,46 @@ using Microsoft.Extensions.Options;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public class AbpSecurityStampValidator : SecurityStampValidator<IdentityUser>
{
public class AbpSecurityStampValidator : SecurityStampValidator<IdentityUser>
protected ITenantConfigurationProvider TenantConfigurationProvider { get; }
protected ICurrentTenant CurrentTenant { get; }
public AbpSecurityStampValidator(
IOptions<SecurityStampValidatorOptions> options,
SignInManager<IdentityUser> signInManager,
ISystemClock systemClock,
ILoggerFactory loggerFactory,
ITenantConfigurationProvider tenantConfigurationProvider,
ICurrentTenant currentTenant)
: base(
options,
signInManager,
systemClock,
loggerFactory)
{
protected ITenantConfigurationProvider TenantConfigurationProvider { get; }
protected ICurrentTenant CurrentTenant { get; }
TenantConfigurationProvider = tenantConfigurationProvider;
CurrentTenant = currentTenant;
}
public AbpSecurityStampValidator(
IOptions<SecurityStampValidatorOptions> options,
SignInManager<IdentityUser> signInManager,
ISystemClock systemClock,
ILoggerFactory loggerFactory,
ITenantConfigurationProvider tenantConfigurationProvider,
ICurrentTenant currentTenant)
: base(
options,
signInManager,
systemClock,
loggerFactory)
[UnitOfWork]
public override async Task ValidateAsync(CookieValidatePrincipalContext context)
{
TenantConfiguration tenant = null;
try
{
TenantConfigurationProvider = tenantConfigurationProvider;
CurrentTenant = currentTenant;
tenant = await TenantConfigurationProvider.GetAsync(saveResolveResult: false);
}
[UnitOfWork]
public override async Task ValidateAsync(CookieValidatePrincipalContext context)
catch (Exception e)
{
TenantConfiguration tenant = null;
try
{
tenant = await TenantConfigurationProvider.GetAsync(saveResolveResult: false);
}
catch (Exception e)
{
Logger.LogException(e);
}
Logger.LogException(e);
}
using (CurrentTenant.Change(tenant?.Id, tenant?.Name))
{
await base.ValidateAsync(context);
}
using (CurrentTenant.Change(tenant?.Id, tenant?.Name))
{
await base.ValidateAsync(context);
}
}
}

37
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSecurityStampValidatorCallback.cs

@ -2,32 +2,31 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Identity;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public class AbpSecurityStampValidatorCallback
{
public class AbpSecurityStampValidatorCallback
/// <summary>
/// Implements callback for SecurityStampValidator's OnRefreshingPrincipal event.
/// https://github.com/IdentityServer/IdentityServer4/blob/main/src/AspNetIdentity/src/SecurityStampValidatorCallback.cs
/// </summary>
public class SecurityStampValidatorCallback
{
/// <summary>
/// Implements callback for SecurityStampValidator's OnRefreshingPrincipal event.
/// https://github.com/IdentityServer/IdentityServer4/blob/main/src/AspNetIdentity/src/SecurityStampValidatorCallback.cs
/// Maintains the claims captured at login time that are not being created by ASP.NET Identity.
/// This is needed to preserve claims such as idp, auth_time, amr.
/// </summary>
public class SecurityStampValidatorCallback
/// <param name="context">The context.</param>
/// <returns></returns>
public static Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context)
{
/// <summary>
/// Maintains the claims captured at login time that are not being created by ASP.NET Identity.
/// This is needed to preserve claims such as idp, auth_time, amr.
/// </summary>
/// <param name="context">The context.</param>
/// <returns></returns>
public static Task UpdatePrincipal(SecurityStampRefreshingPrincipalContext context)
{
var newClaimTypes = context.NewPrincipal.Claims.Select(x => x.Type).ToArray();
var currentClaimsToKeep = context.CurrentPrincipal.Claims.Where(x => !newClaimTypes.Contains(x.Type)).ToArray();
var newClaimTypes = context.NewPrincipal.Claims.Select(x => x.Type).ToArray();
var currentClaimsToKeep = context.CurrentPrincipal.Claims.Where(x => !newClaimTypes.Contains(x.Type)).ToArray();
var id = context.NewPrincipal.Identities.First();
id.AddClaims(currentClaimsToKeep);
var id = context.NewPrincipal.Identities.First();
id.AddClaims(currentClaimsToKeep);
return Task.CompletedTask;
}
return Task.CompletedTask;
}
}
}

107
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/AbpSignInManager.cs

@ -6,72 +6,71 @@ using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public class AbpSignInManager : SignInManager<IdentityUser>
{
public class AbpSignInManager : SignInManager<IdentityUser>
protected AbpIdentityOptions AbpOptions { get; }
public AbpSignInManager(
IdentityUserManager userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<IdentityUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<IdentityUser>> logger,
IAuthenticationSchemeProvider schemes,
IUserConfirmation<IdentityUser> confirmation,
IOptions<AbpIdentityOptions> options
) : base(
userManager,
contextAccessor,
claimsFactory,
optionsAccessor,
logger,
schemes,
confirmation)
{
protected AbpIdentityOptions AbpOptions { get; }
AbpOptions = options.Value;
}
public AbpSignInManager(
IdentityUserManager userManager,
IHttpContextAccessor contextAccessor,
IUserClaimsPrincipalFactory<IdentityUser> claimsFactory,
IOptions<IdentityOptions> optionsAccessor,
ILogger<SignInManager<IdentityUser>> logger,
IAuthenticationSchemeProvider schemes,
IUserConfirmation<IdentityUser> confirmation,
IOptions<AbpIdentityOptions> options
) : base(
userManager,
contextAccessor,
claimsFactory,
optionsAccessor,
logger,
schemes,
confirmation)
public override async Task<SignInResult> PasswordSignInAsync(
string userName,
string password,
bool isPersistent,
bool lockoutOnFailure)
{
foreach (var externalLoginProviderInfo in AbpOptions.ExternalLoginProviders.Values)
{
AbpOptions = options.Value;
}
var externalLoginProvider = (IExternalLoginProvider)Context.RequestServices
.GetRequiredService(externalLoginProviderInfo.Type);
public override async Task<SignInResult> PasswordSignInAsync(
string userName,
string password,
bool isPersistent,
bool lockoutOnFailure)
{
foreach (var externalLoginProviderInfo in AbpOptions.ExternalLoginProviders.Values)
if (await externalLoginProvider.TryAuthenticateAsync(userName, password))
{
var externalLoginProvider = (IExternalLoginProvider)Context.RequestServices
.GetRequiredService(externalLoginProviderInfo.Type);
if (await externalLoginProvider.TryAuthenticateAsync(userName, password))
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
user = await externalLoginProvider.CreateUserAsync(userName, externalLoginProviderInfo.Name);
}
else
{
await externalLoginProvider.UpdateUserAsync(user, externalLoginProviderInfo.Name);
}
return await SignInOrTwoFactorAsync(user, isPersistent);
user = await externalLoginProvider.CreateUserAsync(userName, externalLoginProviderInfo.Name);
}
else
{
await externalLoginProvider.UpdateUserAsync(user, externalLoginProviderInfo.Name);
}
}
return await base.PasswordSignInAsync(userName, password, isPersistent, lockoutOnFailure);
return await SignInOrTwoFactorAsync(user, isPersistent);
}
}
protected override async Task<SignInResult> PreSignInCheck(IdentityUser user)
{
if (!user.IsActive)
{
Logger.LogWarning($"The user is not active therefore cannot login! (username: \"{user.UserName}\", id:\"{user.Id}\")");
return SignInResult.NotAllowed;
}
return await base.PasswordSignInAsync(userName, password, isPersistent, lockoutOnFailure);
}
return await base.PreSignInCheck(user);
protected override async Task<SignInResult> PreSignInCheck(IdentityUser user)
{
if (!user.IsActive)
{
Logger.LogWarning($"The user is not active therefore cannot login! (username: \"{user.UserName}\", id:\"{user.Id}\")");
return SignInResult.NotAllowed;
}
return await base.PreSignInCheck(user);
}
}

17
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/LinkUserTokenProvider.cs

@ -3,17 +3,16 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public class LinkUserTokenProvider : DataProtectorTokenProvider<IdentityUser>
{
public class LinkUserTokenProvider : DataProtectorTokenProvider<IdentityUser>
public LinkUserTokenProvider(
IDataProtectionProvider dataProtectionProvider,
IOptions<DataProtectionTokenProviderOptions> options,
ILogger<DataProtectorTokenProvider<IdentityUser>> logger)
: base(dataProtectionProvider, options, logger)
{
public LinkUserTokenProvider(
IDataProtectionProvider dataProtectionProvider,
IOptions<DataProtectionTokenProviderOptions> options,
ILogger<DataProtectorTokenProvider<IdentityUser>> logger)
: base(dataProtectionProvider, options, logger)
{
}
}
}

47
modules/identity/src/Volo.Abp.Identity.AspNetCore/Volo/Abp/Identity/AspNetCore/SignInResultExtensions.cs

@ -1,37 +1,36 @@
using Microsoft.AspNetCore.Identity;
namespace Volo.Abp.Identity.AspNetCore
namespace Volo.Abp.Identity.AspNetCore;
public static class SignInResultExtensions
{
public static class SignInResultExtensions
public static string ToIdentitySecurityLogAction(this SignInResult result)
{
public static string ToIdentitySecurityLogAction(this SignInResult result)
if (result.Succeeded)
{
if (result.Succeeded)
{
return IdentitySecurityLogActionConsts.LoginSucceeded;
}
if (result.IsLockedOut)
{
return IdentitySecurityLogActionConsts.LoginLockedout;
}
return IdentitySecurityLogActionConsts.LoginSucceeded;
}
if (result.RequiresTwoFactor)
{
return IdentitySecurityLogActionConsts.LoginRequiresTwoFactor;
}
if (result.IsLockedOut)
{
return IdentitySecurityLogActionConsts.LoginLockedout;
}
if (result.IsNotAllowed)
{
return IdentitySecurityLogActionConsts.LoginNotAllowed;
}
if (result.RequiresTwoFactor)
{
return IdentitySecurityLogActionConsts.LoginRequiresTwoFactor;
}
if (!result.Succeeded)
{
return IdentitySecurityLogActionConsts.LoginFailed;
}
if (result.IsNotAllowed)
{
return IdentitySecurityLogActionConsts.LoginNotAllowed;
}
if (!result.Succeeded)
{
return IdentitySecurityLogActionConsts.LoginFailed;
}
return IdentitySecurityLogActionConsts.LoginFailed;
}
}

15
modules/identity/src/Volo.Abp.Identity.Blazor.Server/AbpIdentityBlazorServerModule.cs

@ -2,13 +2,12 @@
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.Blazor.Server;
namespace Volo.Abp.Identity.Blazor.Server
namespace Volo.Abp.Identity.Blazor.Server;
[DependsOn(
typeof(AbpIdentityBlazorModule),
typeof(AbpPermissionManagementBlazorServerModule)
)]
public class AbpIdentityBlazorServerModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityBlazorModule),
typeof(AbpPermissionManagementBlazorServerModule)
)]
public class AbpIdentityBlazorServerModule : AbpModule
{
}
}

17
modules/identity/src/Volo.Abp.Identity.Blazor.WebAssembly/AbpIdentityBlazorWebAssemblyModule.cs

@ -2,14 +2,13 @@
using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement.Blazor.WebAssembly;
namespace Volo.Abp.Identity.Blazor.WebAssembly
namespace Volo.Abp.Identity.Blazor.WebAssembly;
[DependsOn(
typeof(AbpIdentityBlazorModule),
typeof(AbpPermissionManagementBlazorWebAssemblyModule),
typeof(AbpIdentityHttpApiClientModule)
)]
public class AbpIdentityBlazorWebAssemblyModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityBlazorModule),
typeof(AbpPermissionManagementBlazorWebAssemblyModule),
typeof(AbpIdentityHttpApiClientModule)
)]
public class AbpIdentityBlazorWebAssemblyModule : AbpModule
{
}
}

23
modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs

@ -1,19 +1,18 @@
using AutoMapper;
using Volo.Abp.AutoMapper;
namespace Volo.Abp.Identity.Blazor
namespace Volo.Abp.Identity.Blazor;
public class AbpIdentityBlazorAutoMapperProfile : Profile
{
public class AbpIdentityBlazorAutoMapperProfile : Profile
public AbpIdentityBlazorAutoMapperProfile()
{
public AbpIdentityBlazorAutoMapperProfile()
{
CreateMap<IdentityUserDto, IdentityUserUpdateDto>()
.MapExtraProperties()
.Ignore(x => x.Password)
.Ignore(x => x.RoleNames);
CreateMap<IdentityRoleDto, IdentityRoleUpdateDto>()
.MapExtraProperties();
}
CreateMap<IdentityUserDto, IdentityUserUpdateDto>()
.MapExtraProperties()
.Ignore(x => x.Password)
.Ignore(x => x.RoleNames);
CreateMap<IdentityRoleDto, IdentityRoleUpdateDto>()
.MapExtraProperties();
}
}

87
modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorModule.cs

@ -9,58 +9,57 @@ using Volo.Abp.PermissionManagement.Blazor;
using Volo.Abp.Threading;
using Volo.Abp.UI.Navigation;
namespace Volo.Abp.Identity.Blazor
namespace Volo.Abp.Identity.Blazor;
[DependsOn(
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule),
typeof(AbpPermissionManagementBlazorModule),
typeof(AbpBlazoriseUIModule)
)]
public class AbpIdentityBlazorModule : AbpModule
{
[DependsOn(
typeof(AbpIdentityApplicationContractsModule),
typeof(AbpAutoMapperModule),
typeof(AbpPermissionManagementBlazorModule),
typeof(AbpBlazoriseUIModule)
)]
public class AbpIdentityBlazorModule : AbpModule
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context)
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
context.Services.AddAutoMapperObjectMapper<AbpIdentityBlazorModule>();
public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpAutoMapperOptions>(options =>
{
context.Services.AddAutoMapperObjectMapper<AbpIdentityBlazorModule>();
options.AddProfile<AbpIdentityBlazorAutoMapperProfile>(validate: true);
});
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<AbpIdentityBlazorAutoMapperProfile>(validate: true);
});
Configure<AbpNavigationOptions>(options =>
{
options.MenuContributors.Add(new AbpIdentityWebMainMenuContributor());
});
Configure<AbpNavigationOptions>(options =>
{
options.MenuContributors.Add(new AbpIdentityWebMainMenuContributor());
});
Configure<AbpRouterOptions>(options =>
{
options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorModule).Assembly);
});
}
Configure<AbpRouterOptions>(options =>
{
options.AdditionalAssemblies.Add(typeof(AbpIdentityBlazorModule).Assembly);
});
}
public override void PostConfigureServices(ServiceConfigurationContext context)
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
OneTimeRunner.Run(() =>
{
ModuleExtensionConfigurationHelper
.ApplyEntityConfigurationToUi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
createFormTypes: new[] { typeof(IdentityRoleCreateDto) },
editFormTypes: new[] { typeof(IdentityRoleUpdateDto) }
);
ModuleExtensionConfigurationHelper
.ApplyEntityConfigurationToUi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
createFormTypes: new[] { typeof(IdentityRoleCreateDto) },
editFormTypes: new[] { typeof(IdentityRoleUpdateDto) }
);
ModuleExtensionConfigurationHelper
.ApplyEntityConfigurationToUi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
createFormTypes: new[] { typeof(IdentityUserCreateDto) },
editFormTypes: new[] { typeof(IdentityUserUpdateDto) }
);
});
}
ModuleExtensionConfigurationHelper
.ApplyEntityConfigurationToUi(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
createFormTypes: new[] { typeof(IdentityUserCreateDto) },
editFormTypes: new[] { typeof(IdentityUserUpdateDto) }
);
});
}
}

43
modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs

@ -3,36 +3,35 @@ using Volo.Abp.Identity.Localization;
using Volo.Abp.UI.Navigation;
using Volo.Abp.Authorization.Permissions;
namespace Volo.Abp.Identity.Blazor
namespace Volo.Abp.Identity.Blazor;
public class AbpIdentityWebMainMenuContributor : IMenuContributor
{
public class AbpIdentityWebMainMenuContributor : IMenuContributor
public virtual Task ConfigureMenuAsync(MenuConfigurationContext context)
{
public virtual Task ConfigureMenuAsync(MenuConfigurationContext context)
if (context.Menu.Name != StandardMenus.Main)
{
if (context.Menu.Name != StandardMenus.Main)
{
return Task.CompletedTask;
}
return Task.CompletedTask;
}
var administrationMenu = context.Menu.GetAdministration();
var administrationMenu = context.Menu.GetAdministration();
var l = context.GetLocalizer<IdentityResource>();
var l = context.GetLocalizer<IdentityResource>();
var identityMenuItem = new ApplicationMenuItem(IdentityMenuNames.GroupName, l["Menu:IdentityManagement"],
icon: "far fa-id-card");
administrationMenu.AddItem(identityMenuItem);
var identityMenuItem = new ApplicationMenuItem(IdentityMenuNames.GroupName, l["Menu:IdentityManagement"],
icon: "far fa-id-card");
administrationMenu.AddItem(identityMenuItem);
identityMenuItem.AddItem(new ApplicationMenuItem(
IdentityMenuNames.Roles,
l["Roles"],
url: "~/identity/roles").RequirePermissions(IdentityPermissions.Roles.Default));
identityMenuItem.AddItem(new ApplicationMenuItem(
IdentityMenuNames.Roles,
l["Roles"],
url: "~/identity/roles").RequirePermissions(IdentityPermissions.Roles.Default));
identityMenuItem.AddItem(new ApplicationMenuItem(
IdentityMenuNames.Users,
l["Users"],
url: "~/identity/users").RequirePermissions(IdentityPermissions.Users.Default));
identityMenuItem.AddItem(new ApplicationMenuItem(
IdentityMenuNames.Users,
l["Users"],
url: "~/identity/users").RequirePermissions(IdentityPermissions.Users.Default));
return Task.CompletedTask;
}
return Task.CompletedTask;
}
}

13
modules/identity/src/Volo.Abp.Identity.Blazor/IdentityMenuNames.cs

@ -1,10 +1,9 @@
namespace Volo.Abp.Identity.Blazor
namespace Volo.Abp.Identity.Blazor;
public class IdentityMenuNames
{
public class IdentityMenuNames
{
public const string GroupName = "AbpIdentity";
public const string GroupName = "AbpIdentity";
public const string Roles = GroupName + ".Roles";
public const string Users = GroupName + ".Users";
}
public const string Roles = GroupName + ".Roles";
public const string Users = GroupName + ".Users";
}

125
modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleManagement.razor.cs

@ -12,39 +12,39 @@ using Volo.Abp.PermissionManagement.Blazor.Components;
using Volo.Abp.ObjectExtending;
using Volo.Abp.Data;
namespace Volo.Abp.Identity.Blazor.Pages.Identity
namespace Volo.Abp.Identity.Blazor.Pages.Identity;
public partial class RoleManagement
{
public partial class RoleManagement
{
protected const string PermissionProviderName = "R";
protected const string PermissionProviderName = "R";
protected PermissionManagementModal PermissionManagementModal;
protected PermissionManagementModal PermissionManagementModal;
protected string ManagePermissionsPolicyName;
protected string ManagePermissionsPolicyName;
protected bool HasManagePermissionsPermission { get; set; }
protected bool HasManagePermissionsPermission { get; set; }
protected PageToolbar Toolbar { get; } = new();
protected PageToolbar Toolbar { get; } = new();
protected List<TableColumn> RoleManagementTableColumns => TableColumns.Get<RoleManagement>();
protected List<TableColumn> RoleManagementTableColumns => TableColumns.Get<RoleManagement>();
public RoleManagement()
{
ObjectMapperContext = typeof(AbpIdentityBlazorModule);
LocalizationResource = typeof(IdentityResource);
public RoleManagement()
{
ObjectMapperContext = typeof(AbpIdentityBlazorModule);
LocalizationResource = typeof(IdentityResource);
CreatePolicyName = IdentityPermissions.Roles.Create;
UpdatePolicyName = IdentityPermissions.Roles.Update;
DeletePolicyName = IdentityPermissions.Roles.Delete;
ManagePermissionsPolicyName = IdentityPermissions.Roles.ManagePermissions;
}
CreatePolicyName = IdentityPermissions.Roles.Create;
UpdatePolicyName = IdentityPermissions.Roles.Update;
DeletePolicyName = IdentityPermissions.Roles.Delete;
ManagePermissionsPolicyName = IdentityPermissions.Roles.ManagePermissions;
}
protected override ValueTask SetEntityActionsAsync()
{
EntityActions
.Get<RoleManagement>()
.AddRange(new EntityAction[]
{
protected override ValueTask SetEntityActionsAsync()
{
EntityActions
.Get<RoleManagement>()
.AddRange(new EntityAction[]
{
new EntityAction
{
Text = L["Edit"],
@ -68,16 +68,16 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
Clicked = async (data) => await DeleteEntityAsync(data.As<IdentityRoleDto>()),
ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As<IdentityRoleDto>())
}
});
});
return base.SetEntityActionsAsync();
}
return base.SetEntityActionsAsync();
}
protected override ValueTask SetTableColumnsAsync()
{
RoleManagementTableColumns
.AddRange(new TableColumn[]
{
protected override ValueTask SetTableColumnsAsync()
{
RoleManagementTableColumns
.AddRange(new TableColumn[]
{
new TableColumn
{
Title = L["Actions"],
@ -89,35 +89,34 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
Data = nameof(IdentityRoleDto.Name),
Component = typeof(RoleNameComponent)
},
});
RoleManagementTableColumns.AddRange(GetExtensionTableColumns(IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role));
return base.SetTableColumnsAsync();
}
protected override async Task SetPermissionsAsync()
{
await base.SetPermissionsAsync();
HasManagePermissionsPermission =
await AuthorizationService.IsGrantedAsync(IdentityPermissions.Roles.ManagePermissions);
}
protected override string GetDeleteConfirmationMessage(IdentityRoleDto entity)
{
return string.Format(L["RoleDeletionConfirmationMessage"], entity.Name);
}
protected override ValueTask SetToolbarItemsAsync()
{
Toolbar.AddButton(L["NewRole"],
OpenCreateModalAsync,
IconName.Add,
requiredPolicyName: CreatePolicyName);
return base.SetToolbarItemsAsync();
}
});
RoleManagementTableColumns.AddRange(GetExtensionTableColumns(IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role));
return base.SetTableColumnsAsync();
}
protected override async Task SetPermissionsAsync()
{
await base.SetPermissionsAsync();
HasManagePermissionsPermission =
await AuthorizationService.IsGrantedAsync(IdentityPermissions.Roles.ManagePermissions);
}
protected override string GetDeleteConfirmationMessage(IdentityRoleDto entity)
{
return string.Format(L["RoleDeletionConfirmationMessage"], entity.Name);
}
protected override ValueTask SetToolbarItemsAsync()
{
Toolbar.AddButton(L["NewRole"],
OpenCreateModalAsync,
IconName.Add,
requiredPolicyName: CreatePolicyName);
return base.SetToolbarItemsAsync();
}
}
}

11
modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/RoleNameComponent.razor.cs

@ -1,9 +1,8 @@
using Microsoft.AspNetCore.Components;
namespace Volo.Abp.Identity.Blazor.Pages.Identity
namespace Volo.Abp.Identity.Blazor.Pages.Identity;
public partial class RoleNameComponent : ComponentBase
{
public partial class RoleNameComponent : ComponentBase
{
[Parameter] public object Data { get; set; }
}
}
[Parameter] public object Data { get; set; }
}

227
modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor.cs

@ -11,129 +11,129 @@ using Volo.Abp.Identity.Localization;
using Volo.Abp.ObjectExtending;
using Volo.Abp.PermissionManagement.Blazor.Components;
namespace Volo.Abp.Identity.Blazor.Pages.Identity
namespace Volo.Abp.Identity.Blazor.Pages.Identity;
public partial class UserManagement
{
public partial class UserManagement
{
protected const string PermissionProviderName = "U";
protected const string PermissionProviderName = "U";
protected const string DefaultSelectedTab = "UserInformations";
protected const string DefaultSelectedTab = "UserInformations";
protected PermissionManagementModal PermissionManagementModal;
protected PermissionManagementModal PermissionManagementModal;
protected IReadOnlyList<IdentityRoleDto> Roles;
protected IReadOnlyList<IdentityRoleDto> Roles;
protected AssignedRoleViewModel[] NewUserRoles;
protected AssignedRoleViewModel[] NewUserRoles;
protected AssignedRoleViewModel[] EditUserRoles;
protected AssignedRoleViewModel[] EditUserRoles;
protected string ManagePermissionsPolicyName;
protected string ManagePermissionsPolicyName;
protected bool HasManagePermissionsPermission { get; set; }
protected bool HasManagePermissionsPermission { get; set; }
protected string CreateModalSelectedTab = DefaultSelectedTab;
protected string CreateModalSelectedTab = DefaultSelectedTab;
protected string EditModalSelectedTab = DefaultSelectedTab;
protected string EditModalSelectedTab = DefaultSelectedTab;
protected PageToolbar Toolbar { get; } = new();
protected PageToolbar Toolbar { get; } = new();
private List<TableColumn> UserManagementTableColumns => TableColumns.Get<UserManagement>();
private List<TableColumn> UserManagementTableColumns => TableColumns.Get<UserManagement>();
public UserManagement()
{
ObjectMapperContext = typeof(AbpIdentityBlazorModule);
LocalizationResource = typeof(IdentityResource);
public UserManagement()
{
ObjectMapperContext = typeof(AbpIdentityBlazorModule);
LocalizationResource = typeof(IdentityResource);
CreatePolicyName = IdentityPermissions.Users.Create;
UpdatePolicyName = IdentityPermissions.Users.Update;
DeletePolicyName = IdentityPermissions.Users.Delete;
ManagePermissionsPolicyName = IdentityPermissions.Users.ManagePermissions;
}
CreatePolicyName = IdentityPermissions.Users.Create;
UpdatePolicyName = IdentityPermissions.Users.Update;
DeletePolicyName = IdentityPermissions.Users.Delete;
ManagePermissionsPolicyName = IdentityPermissions.Users.ManagePermissions;
}
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
protected override async Task OnInitializedAsync()
{
await base.OnInitializedAsync();
try
{
Roles = (await AppService.GetAssignableRolesAsync()).Items;
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
try
{
Roles = (await AppService.GetAssignableRolesAsync()).Items;
}
protected override async Task SetPermissionsAsync()
catch (Exception ex)
{
await base.SetPermissionsAsync();
HasManagePermissionsPermission =
await AuthorizationService.IsGrantedAsync(IdentityPermissions.Users.ManagePermissions);
await HandleErrorAsync(ex);
}
}
protected override Task OpenCreateModalAsync()
{
CreateModalSelectedTab = DefaultSelectedTab;
protected override async Task SetPermissionsAsync()
{
await base.SetPermissionsAsync();
NewUserRoles = Roles.Select(x => new AssignedRoleViewModel
{
Name = x.Name,
IsAssigned = x.IsDefault
}).ToArray();
HasManagePermissionsPermission =
await AuthorizationService.IsGrantedAsync(IdentityPermissions.Users.ManagePermissions);
}
return base.OpenCreateModalAsync();
}
protected override Task OpenCreateModalAsync()
{
CreateModalSelectedTab = DefaultSelectedTab;
protected override Task OnCreatingEntityAsync()
NewUserRoles = Roles.Select(x => new AssignedRoleViewModel
{
// apply roles before saving
NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray();
Name = x.Name,
IsAssigned = x.IsDefault
}).ToArray();
return base.OnCreatingEntityAsync();
}
return base.OpenCreateModalAsync();
}
protected override async Task OpenEditModalAsync(IdentityUserDto entity)
{
try
{
EditModalSelectedTab = DefaultSelectedTab;
protected override Task OnCreatingEntityAsync()
{
// apply roles before saving
NewEntity.RoleNames = NewUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray();
var userRoleNames = (await AppService.GetRolesAsync(entity.Id)).Items.Select(r => r.Name).ToList();
return base.OnCreatingEntityAsync();
}
EditUserRoles = Roles.Select(x => new AssignedRoleViewModel
{
Name = x.Name,
IsAssigned = userRoleNames.Contains(x.Name)
}).ToArray();
protected override async Task OpenEditModalAsync(IdentityUserDto entity)
{
try
{
EditModalSelectedTab = DefaultSelectedTab;
await base.OpenEditModalAsync(entity);
}
catch (Exception ex)
{
await HandleErrorAsync(ex);
}
}
var userRoleNames = (await AppService.GetRolesAsync(entity.Id)).Items.Select(r => r.Name).ToList();
protected override Task OnUpdatingEntityAsync()
{
// apply roles before saving
EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray();
EditUserRoles = Roles.Select(x => new AssignedRoleViewModel
{
Name = x.Name,
IsAssigned = userRoleNames.Contains(x.Name)
}).ToArray();
return base.OnUpdatingEntityAsync();
await base.OpenEditModalAsync(entity);
}
protected override string GetDeleteConfirmationMessage(IdentityUserDto entity)
catch (Exception ex)
{
return string.Format(L["UserDeletionConfirmationMessage"], entity.UserName);
await HandleErrorAsync(ex);
}
}
protected override ValueTask SetEntityActionsAsync()
{
EntityActions
.Get<UserManagement>()
.AddRange(new EntityAction[]
{
protected override Task OnUpdatingEntityAsync()
{
// apply roles before saving
EditingEntity.RoleNames = EditUserRoles.Where(x => x.IsAssigned).Select(x => x.Name).ToArray();
return base.OnUpdatingEntityAsync();
}
protected override string GetDeleteConfirmationMessage(IdentityUserDto entity)
{
return string.Format(L["UserDeletionConfirmationMessage"], entity.UserName);
}
protected override ValueTask SetEntityActionsAsync()
{
EntityActions
.Get<UserManagement>()
.AddRange(new EntityAction[]
{
new EntityAction
{
Text = L["Edit"],
@ -157,16 +157,16 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
Clicked = async (data) => await DeleteEntityAsync(data.As<IdentityUserDto>()),
ConfirmationMessage = (data) => GetDeleteConfirmationMessage(data.As<IdentityUserDto>())
}
});
});
return base.SetEntityActionsAsync();
}
return base.SetEntityActionsAsync();
}
protected override ValueTask SetTableColumnsAsync()
{
UserManagementTableColumns
.AddRange(new TableColumn[]
{
protected override ValueTask SetTableColumnsAsync()
{
UserManagementTableColumns
.AddRange(new TableColumn[]
{
new TableColumn
{
Title = L["Actions"],
@ -187,27 +187,26 @@ namespace Volo.Abp.Identity.Blazor.Pages.Identity
Title = L["PhoneNumber"],
Data = nameof(IdentityUserDto.PhoneNumber),
}
});
});
UserManagementTableColumns.AddRange(GetExtensionTableColumns(IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User));
return base.SetEntityActionsAsync();
}
protected override ValueTask SetToolbarItemsAsync()
{
Toolbar.AddButton(L["NewUser"], OpenCreateModalAsync,
IconName.Add,
requiredPolicyName: CreatePolicyName);
return base.SetToolbarItemsAsync();
}
UserManagementTableColumns.AddRange(GetExtensionTableColumns(IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User));
return base.SetEntityActionsAsync();
}
public class AssignedRoleViewModel
protected override ValueTask SetToolbarItemsAsync()
{
public string Name { get; set; }
Toolbar.AddButton(L["NewUser"], OpenCreateModalAsync,
IconName.Add,
requiredPolicyName: CreatePolicyName);
public bool IsAssigned { get; set; }
return base.SetToolbarItemsAsync();
}
}
}
public class AssignedRoleViewModel
{
public string Name { get; set; }
public bool IsAssigned { get; set; }
}

49
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/AbpIdentityDomainSharedModule.cs

@ -9,35 +9,34 @@ using Volo.Abp.Validation;
using Volo.Abp.Validation.Localization;
using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[DependsOn(
typeof(AbpUsersDomainSharedModule),
typeof(AbpValidationModule),
typeof(AbpFeaturesModule)
)]
public class AbpIdentityDomainSharedModule : AbpModule
{
[DependsOn(
typeof(AbpUsersDomainSharedModule),
typeof(AbpValidationModule),
typeof(AbpFeaturesModule)
)]
public class AbpIdentityDomainSharedModule : AbpModule
public override void ConfigureServices(ServiceConfigurationContext context)
{
public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpVirtualFileSystemOptions>(options =>
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpIdentityDomainSharedModule>();
});
options.FileSets.AddEmbedded<AbpIdentityDomainSharedModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<IdentityResource>("en")
.AddBaseTypes(
typeof(AbpValidationResource)
).AddVirtualJson("/Volo/Abp/Identity/Localization");
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Add<IdentityResource>("en")
.AddBaseTypes(
typeof(AbpValidationResource)
).AddVirtualJson("/Volo/Abp/Identity/Localization");
});
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace("Volo.Abp.Identity", typeof(IdentityResource));
});
}
Configure<AbpExceptionLocalizationOptions>(options =>
{
options.MapCodeNamespace("Volo.Abp.Identity", typeof(IdentityResource));
});
}
}

9
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IUserRoleFinder.cs

@ -1,10 +1,9 @@
using System;
using System.Threading.Tasks;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IUserRoleFinder
{
public interface IUserRoleFinder
{
Task<string[]> GetRolesAsync(Guid userId);
}
Task<string[]> GetRolesAsync(Guid userId);
}

45
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeConsts.cs

@ -1,25 +1,24 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityClaimTypeConsts
{
public class IdentityClaimTypeConsts
{
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNameLength { get; set; } = 256;
/// <summary>
/// Default value: 512
/// </summary>
public static int MaxRegexLength { get; set; } = 512;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxRegexDescriptionLength { get; set; } = 128;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxDescriptionLength { get; set; } = 256;
}
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNameLength { get; set; } = 256;
/// <summary>
/// Default value: 512
/// </summary>
public static int MaxRegexLength { get; set; } = 512;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxRegexDescriptionLength { get; set; } = 128;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxDescriptionLength { get; set; } = 256;
}

27
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimTypeEto.cs

@ -1,24 +1,23 @@
using System;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Serializable]
public class IdentityClaimTypeEto
{
[Serializable]
public class IdentityClaimTypeEto
{
public Guid Id { get; set; }
public string Name { get; set; }
public Guid Id { get; set; }
public string Name { get; set; }
public bool Required { get; set; }
public bool Required { get; set; }
public bool IsStatic { get; set; }
public bool IsStatic { get; set; }
public string Regex { get; set; }
public string Regex { get; set; }
public string RegexDescription { get; set; }
public string RegexDescription { get; set; }
public string Description { get; set; }
public string Description { get; set; }
public IdentityClaimValueType ValueType { get; set; }
}
public IdentityClaimValueType ValueType { get; set; }
}

15
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityClaimValueType.cs

@ -1,10 +1,9 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public enum IdentityClaimValueType
{
public enum IdentityClaimValueType
{
String,
Int,
Boolean,
DateTime
}
String,
Int,
Boolean,
DateTime
}

23
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityErrorCodes.cs

@ -1,14 +1,13 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityErrorCodes
{
public static class IdentityErrorCodes
{
public const string UserSelfDeletion = "Volo.Abp.Identity:010001";
public const string MaxAllowedOuMembership = "Volo.Abp.Identity:010002";
public const string ExternalUserPasswordChange = "Volo.Abp.Identity:010003";
public const string DuplicateOrganizationUnitDisplayName = "Volo.Abp.Identity:010004";
public const string StaticRoleRenaming = "Volo.Abp.Identity:010005";
public const string StaticRoleDeletion = "Volo.Abp.Identity:010006";
public const string UsersCanNotChangeTwoFactor = "Volo.Abp.Identity:010007";
public const string CanNotChangeTwoFactor = "Volo.Abp.Identity:010008";
}
public const string UserSelfDeletion = "Volo.Abp.Identity:010001";
public const string MaxAllowedOuMembership = "Volo.Abp.Identity:010002";
public const string ExternalUserPasswordChange = "Volo.Abp.Identity:010003";
public const string DuplicateOrganizationUnitDisplayName = "Volo.Abp.Identity:010004";
public const string StaticRoleRenaming = "Volo.Abp.Identity:010005";
public const string StaticRoleDeletion = "Volo.Abp.Identity:010006";
public const string UsersCanNotChangeTwoFactor = "Volo.Abp.Identity:010007";
public const string CanNotChangeTwoFactor = "Volo.Abp.Identity:010008";
}

11
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleClaimConsts.cs

@ -1,9 +1,8 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityRoleClaimConsts
{
public static class IdentityRoleClaimConsts
{
public static int MaxClaimTypeLength { get; set; } = IdentityUserClaimConsts.MaxClaimTypeLength;
public static int MaxClaimTypeLength { get; set; } = IdentityUserClaimConsts.MaxClaimTypeLength;
public static int MaxClaimValueLength { get; set; } = IdentityUserClaimConsts.MaxClaimValueLength;
}
public static int MaxClaimValueLength { get; set; } = IdentityUserClaimConsts.MaxClaimValueLength;
}

25
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleConsts.cs

@ -1,15 +1,14 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityRoleConsts
{
public static class IdentityRoleConsts
{
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNameLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNormalizedNameLength { get; set; } = 256;
}
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNameLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxNormalizedNameLength { get; set; } = 256;
}

27
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleEto.cs

@ -1,20 +1,19 @@
using System;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Serializable]
public class IdentityRoleEto
{
[Serializable]
public class IdentityRoleEto
{
public Guid Id { get; set; }
public Guid Id { get; set; }
public Guid? TenantId { get; set; }
public string Name { get; set; }
public Guid? TenantId { get; set; }
public bool IsDefault { get; set; }
public string Name { get; set; }
public bool IsDefault { get; set; }
public bool IsStatic { get; set; }
public bool IsStatic { get; set; }
public bool IsPublic { get; set; }
}
}
public bool IsPublic { get; set; }
}

19
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityRoleNameChangedEto.cs

@ -1,16 +1,15 @@
using System;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Serializable]
public class IdentityRoleNameChangedEto
{
[Serializable]
public class IdentityRoleNameChangedEto
{
public Guid Id { get; set; }
public Guid Id { get; set; }
public Guid? TenantId { get; set; }
public Guid? TenantId { get; set; }
public string Name { get; set; }
public string Name { get; set; }
public string OldName { get; set; }
}
}
public string OldName { get; set; }
}

35
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogActionConsts.cs

@ -1,33 +1,32 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentitySecurityLogActionConsts
{
public class IdentitySecurityLogActionConsts
{
public static string LoginSucceeded { get; set; } = "LoginSucceeded";
public static string LoginSucceeded { get; set; } = "LoginSucceeded";
public static string LoginLockedout { get; set; } = "LoginLockedout";
public static string LoginLockedout { get; set; } = "LoginLockedout";
public static string LoginNotAllowed { get; set; } = "LoginNotAllowed";
public static string LoginNotAllowed { get; set; } = "LoginNotAllowed";
public static string LoginRequiresTwoFactor { get; set; } = "LoginRequiresTwoFactor";
public static string LoginRequiresTwoFactor { get; set; } = "LoginRequiresTwoFactor";
public static string LoginFailed { get; set; } = "LoginFailed";
public static string LoginFailed { get; set; } = "LoginFailed";
public static string LoginInvalidUserName { get; set; } = "LoginInvalidUserName";
public static string LoginInvalidUserName { get; set; } = "LoginInvalidUserName";
public static string LoginInvalidUserNameOrPassword { get; set; } = "LoginInvalidUserNameOrPassword";
public static string LoginInvalidUserNameOrPassword { get; set; } = "LoginInvalidUserNameOrPassword";
public static string Logout { get; set; } = "Logout";
public static string Logout { get; set; } = "Logout";
public static string ChangeUserName { get; set; } = "ChangeUserName";
public static string ChangeUserName { get; set; } = "ChangeUserName";
public static string ChangeEmail { get; set; } = "ChangeEmail";
public static string ChangeEmail { get; set; } = "ChangeEmail";
public static string ChangePhoneNumber { get; set; } = "ChangePhoneNumber";
public static string ChangePhoneNumber { get; set; } = "ChangePhoneNumber";
public static string ChangePassword { get; set; } = "ChangePassword";
public static string ChangePassword { get; set; } = "ChangePassword";
public static string TwoFactorEnabled { get; set; } = "TwoFactorEnabled";
public static string TwoFactorEnabled { get; set; } = "TwoFactorEnabled";
public static string TwoFactorDisabled { get; set; } = "TwoFactorDisabled";
}
public static string TwoFactorDisabled { get; set; } = "TwoFactorDisabled";
}

99
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogConsts.cs

@ -1,52 +1,51 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentitySecurityLogConsts
{
public class IdentitySecurityLogConsts
{
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxApplicationNameLength { get; set; } = 96;
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxIdentityLength { get; set; } = 96;
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxActionLength { get; set; } = 96;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxUserNameLength { get; set; } = 256;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxTenantNameLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxClientIpAddressLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxClientIdLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxCorrelationIdLength { get; set; } = 64;
/// <summary>
/// Default value: 512
/// </summary>
public static int MaxBrowserInfoLength { get; set; } = 512;
}
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxApplicationNameLength { get; set; } = 96;
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxIdentityLength { get; set; } = 96;
/// <summary>
/// Default value: 96
/// </summary>
public static int MaxActionLength { get; set; } = 96;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxUserNameLength { get; set; } = 256;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxTenantNameLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxClientIpAddressLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxClientIdLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxCorrelationIdLength { get; set; } = 64;
/// <summary>
/// Default value: 512
/// </summary>
public static int MaxBrowserInfoLength { get; set; } = 512;
}

13
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentitySecurityLogIdentityConsts.cs

@ -1,11 +1,10 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentitySecurityLogIdentityConsts
{
public static class IdentitySecurityLogIdentityConsts
{
public static string Identity { get; set; } = "Identity";
public static string Identity { get; set; } = "Identity";
public static string IdentityExternal { get; set; } = "IdentityExternal";
public static string IdentityExternal { get; set; } = "IdentityExternal";
public static string IdentityTwoFactor { get; set; } = "IdentityTwoFactor";
}
public static string IdentityTwoFactor { get; set; } = "IdentityTwoFactor";
}

23
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserClaimConsts.cs

@ -1,15 +1,14 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityUserClaimConsts
{
public static class IdentityUserClaimConsts
{
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxClaimTypeLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxClaimTypeLength { get; set; } = 256;
/// <summary>
/// Default value: 1024
/// </summary>
public static int MaxClaimValueLength { get; set; } = 1024;
}
/// <summary>
/// Default value: 1024
/// </summary>
public static int MaxClaimValueLength { get; set; } = 1024;
}

53
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserConsts.cs

@ -1,41 +1,40 @@
using Volo.Abp.Users;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityUserConsts
{
public static class IdentityUserConsts
{
public static int MaxUserNameLength { get; set; } = AbpUserConsts.MaxUserNameLength;
public static int MaxUserNameLength { get; set; } = AbpUserConsts.MaxUserNameLength;
public static int MaxNameLength { get; set; } = AbpUserConsts.MaxNameLength;
public static int MaxNameLength { get; set; } = AbpUserConsts.MaxNameLength;
public static int MaxSurnameLength { get; set; } = AbpUserConsts.MaxSurnameLength;
public static int MaxSurnameLength { get; set; } = AbpUserConsts.MaxSurnameLength;
public static int MaxNormalizedUserNameLength { get; set; } = MaxUserNameLength;
public static int MaxNormalizedUserNameLength { get; set; } = MaxUserNameLength;
public static int MaxEmailLength { get; set; } = AbpUserConsts.MaxEmailLength;
public static int MaxEmailLength { get; set; } = AbpUserConsts.MaxEmailLength;
public static int MaxNormalizedEmailLength { get; set; } = MaxEmailLength;
public static int MaxNormalizedEmailLength { get; set; } = MaxEmailLength;
public static int MaxPhoneNumberLength { get; set; } = AbpUserConsts.MaxPhoneNumberLength;
public static int MaxPhoneNumberLength { get; set; } = AbpUserConsts.MaxPhoneNumberLength;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxPasswordLength { get; set; } = 128;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxPasswordLength { get; set; } = 128;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxPasswordHashLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxPasswordHashLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxSecurityStampLength { get; set; } = 256;
/// <summary>
/// Default value: 256
/// </summary>
public static int MaxSecurityStampLength { get; set; } = 256;
/// <summary>
/// Default value: 16
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 16;
}
/// <summary>
/// Default value: 16
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 16;
}

35
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserLoginConsts.cs

@ -1,20 +1,19 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityUserLoginConsts
{
public static class IdentityUserLoginConsts
{
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 64;
/// <summary>
/// Default value: 196
/// </summary>
public static int MaxProviderKeyLength { get; set; } = 196;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxProviderDisplayNameLength { get; set; } = 128;
}
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 64;
/// <summary>
/// Default value: 196
/// </summary>
public static int MaxProviderKeyLength { get; set; } = 196;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxProviderDisplayNameLength { get; set; } = 128;
}

23
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/IdentityUserTokenConsts.cs

@ -1,15 +1,14 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class IdentityUserTokenConsts
{
public static class IdentityUserTokenConsts
{
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 64;
/// <summary>
/// Default value: 64
/// </summary>
public static int MaxLoginProviderLength { get; set; } = 64;
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxNameLength { get; set; } = 128;
}
/// <summary>
/// Default value: 128
/// </summary>
public static int MaxNameLength { get; set; } = 128;
}

13
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/LinkUserTokenProviderConsts.cs

@ -1,11 +1,10 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class LinkUserTokenProviderConsts
{
public static class LinkUserTokenProviderConsts
{
public static string LinkUserTokenProviderName { get; set; } = "AbpLinkUser";
public static string LinkUserTokenProviderName { get; set; } = "AbpLinkUser";
public static string LinkUserTokenPurpose { get; set; } = "AbpLinkUser";
public static string LinkUserTokenPurpose { get; set; } = "AbpLinkUser";
public static string LinkUserLoginTokenPurpose { get; set; } = "AbpLinkUserLogin";
}
public static string LinkUserLoginTokenPurpose { get; set; } = "AbpLinkUserLogin";
}

11
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/IdentityResource.cs

@ -1,10 +1,9 @@
using Volo.Abp.Localization;
namespace Volo.Abp.Identity.Localization
namespace Volo.Abp.Identity.Localization;
[LocalizationResourceName("AbpIdentity")]
public class IdentityResource
{
[LocalizationResourceName("AbpIdentity")]
public class IdentityResource
{
}
}

39
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitConsts.cs

@ -1,25 +1,24 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class OrganizationUnitConsts
{
public static class OrganizationUnitConsts
{
/// <summary>
/// Maximum length of the DisplayName property.
/// </summary>
public static int MaxDisplayNameLength { get; set; } = 128;
/// <summary>
/// Maximum length of the DisplayName property.
/// </summary>
public static int MaxDisplayNameLength { get; set; } = 128;
/// <summary>
/// Maximum depth of an OU hierarchy.
/// </summary>
public const int MaxDepth = 16;
/// <summary>
/// Maximum depth of an OU hierarchy.
/// </summary>
public const int MaxDepth = 16;
/// <summary>
/// Length of a code unit between dots.
/// </summary>
public const int CodeUnitLength = 5;
/// <summary>
/// Length of a code unit between dots.
/// </summary>
public const int CodeUnitLength = 5;
/// <summary>
/// Maximum length of the Code property.
/// </summary>
public const int MaxCodeLength = MaxDepth * (CodeUnitLength + 1) - 1;
}
/// <summary>
/// Maximum length of the Code property.
/// </summary>
public const int MaxCodeLength = MaxDepth * (CodeUnitLength + 1) - 1;
}

19
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/OrganizationUnitEto.cs

@ -1,16 +1,15 @@
using System;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Serializable]
public class OrganizationUnitEto
{
[Serializable]
public class OrganizationUnitEto
{
public Guid Id { get; set; }
public Guid Id { get; set; }
public Guid? TenantId { get; set; }
public Guid? TenantId { get; set; }
public string Code { get; set; }
public string Code { get; set; }
public string DisplayName { get; set; }
}
}
public string DisplayName { get; set; }
}

95
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Settings/IdentitySettingNames.cs

@ -1,52 +1,51 @@
namespace Volo.Abp.Identity.Settings
namespace Volo.Abp.Identity.Settings;
public static class IdentitySettingNames
{
public static class IdentitySettingNames
private const string Prefix = "Abp.Identity";
public static class Password
{
private const string PasswordPrefix = Prefix + ".Password";
public const string RequiredLength = PasswordPrefix + ".RequiredLength";
public const string RequiredUniqueChars = PasswordPrefix + ".RequiredUniqueChars";
public const string RequireNonAlphanumeric = PasswordPrefix + ".RequireNonAlphanumeric";
public const string RequireLowercase = PasswordPrefix + ".RequireLowercase";
public const string RequireUppercase = PasswordPrefix + ".RequireUppercase";
public const string RequireDigit = PasswordPrefix + ".RequireDigit";
}
public static class Lockout
{
private const string LockoutPrefix = Prefix + ".Lockout";
public const string AllowedForNewUsers = LockoutPrefix + ".AllowedForNewUsers";
public const string LockoutDuration = LockoutPrefix + ".LockoutDuration";
public const string MaxFailedAccessAttempts = LockoutPrefix + ".MaxFailedAccessAttempts";
}
public static class SignIn
{
private const string Prefix = "Abp.Identity";
public static class Password
{
private const string PasswordPrefix = Prefix + ".Password";
public const string RequiredLength = PasswordPrefix + ".RequiredLength";
public const string RequiredUniqueChars = PasswordPrefix + ".RequiredUniqueChars";
public const string RequireNonAlphanumeric = PasswordPrefix + ".RequireNonAlphanumeric";
public const string RequireLowercase = PasswordPrefix + ".RequireLowercase";
public const string RequireUppercase = PasswordPrefix + ".RequireUppercase";
public const string RequireDigit = PasswordPrefix + ".RequireDigit";
}
public static class Lockout
{
private const string LockoutPrefix = Prefix + ".Lockout";
public const string AllowedForNewUsers = LockoutPrefix + ".AllowedForNewUsers";
public const string LockoutDuration = LockoutPrefix + ".LockoutDuration";
public const string MaxFailedAccessAttempts = LockoutPrefix + ".MaxFailedAccessAttempts";
}
public static class SignIn
{
private const string SignInPrefix = Prefix + ".SignIn";
public const string RequireConfirmedEmail = SignInPrefix + ".RequireConfirmedEmail";
public const string EnablePhoneNumberConfirmation = SignInPrefix + ".EnablePhoneNumberConfirmation";
public const string RequireConfirmedPhoneNumber = SignInPrefix + ".RequireConfirmedPhoneNumber";
}
public static class User
{
private const string UserPrefix = Prefix + ".User";
public const string IsUserNameUpdateEnabled = UserPrefix + ".IsUserNameUpdateEnabled";
public const string IsEmailUpdateEnabled = UserPrefix + ".IsEmailUpdateEnabled";
}
public static class OrganizationUnit
{
private const string OrganizationUnitPrefix = Prefix + ".OrganizationUnit";
public const string MaxUserMembershipCount = OrganizationUnitPrefix + ".MaxUserMembershipCount";
}
private const string SignInPrefix = Prefix + ".SignIn";
public const string RequireConfirmedEmail = SignInPrefix + ".RequireConfirmedEmail";
public const string EnablePhoneNumberConfirmation = SignInPrefix + ".EnablePhoneNumberConfirmation";
public const string RequireConfirmedPhoneNumber = SignInPrefix + ".RequireConfirmedPhoneNumber";
}
public static class User
{
private const string UserPrefix = Prefix + ".User";
public const string IsUserNameUpdateEnabled = UserPrefix + ".IsUserNameUpdateEnabled";
public const string IsEmailUpdateEnabled = UserPrefix + ".IsEmailUpdateEnabled";
}
public static class OrganizationUnit
{
private const string OrganizationUnitPrefix = Prefix + ".OrganizationUnit";
public const string MaxUserMembershipCount = OrganizationUnitPrefix + ".MaxUserMembershipCount";
}
}

71
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfiguration.cs

@ -1,44 +1,43 @@
using System;
using Volo.Abp.ObjectExtending.Modularity;
namespace Volo.Abp.ObjectExtending
namespace Volo.Abp.ObjectExtending;
public class IdentityModuleExtensionConfiguration : ModuleExtensionConfiguration
{
public class IdentityModuleExtensionConfiguration : ModuleExtensionConfiguration
public IdentityModuleExtensionConfiguration ConfigureUser(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.User,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureRole(
Action<EntityExtensionConfiguration> configureAction)
{
public IdentityModuleExtensionConfiguration ConfigureUser(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.User,
configureAction
);
}
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.Role,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureRole(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.Role,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureClaimType(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.ClaimType,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureClaimType(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.ClaimType,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureOrganizationUnit(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
configureAction
);
}
public IdentityModuleExtensionConfiguration ConfigureOrganizationUnit(
Action<EntityExtensionConfiguration> configureAction)
{
return this.ConfigureEntity(
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
configureAction
);
}
}
}

21
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConfigurationDictionaryExtensions.cs

@ -1,18 +1,17 @@
using System;
using Volo.Abp.ObjectExtending.Modularity;
namespace Volo.Abp.ObjectExtending
namespace Volo.Abp.ObjectExtending;
public static class IdentityModuleExtensionConfigurationDictionaryExtensions
{
public static class IdentityModuleExtensionConfigurationDictionaryExtensions
public static ModuleExtensionConfigurationDictionary ConfigureIdentity(
this ModuleExtensionConfigurationDictionary modules,
Action<IdentityModuleExtensionConfiguration> configureAction)
{
public static ModuleExtensionConfigurationDictionary ConfigureIdentity(
this ModuleExtensionConfigurationDictionary modules,
Action<IdentityModuleExtensionConfiguration> configureAction)
{
return modules.ConfigureModule(
IdentityModuleExtensionConsts.ModuleName,
configureAction
);
}
return modules.ConfigureModule(
IdentityModuleExtensionConsts.ModuleName,
configureAction
);
}
}

23
modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/ObjectExtending/IdentityModuleExtensionConsts.cs

@ -1,18 +1,17 @@
namespace Volo.Abp.ObjectExtending
namespace Volo.Abp.ObjectExtending;
public static class IdentityModuleExtensionConsts
{
public static class IdentityModuleExtensionConsts
public const string ModuleName = "Identity";
public static class EntityNames
{
public const string ModuleName = "Identity";
public const string User = "User";
public static class EntityNames
{
public const string User = "User";
public const string Role = "Role";
public const string Role = "Role";
public const string ClaimType = "ClaimType";
public const string ClaimType = "ClaimType";
public const string OrganizationUnit = "OrganizationUnit";
}
public const string OrganizationUnit = "OrganizationUnit";
}
}
}

195
modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/AbpIdentityResultExtensions.cs

@ -8,146 +8,145 @@ using Volo.Abp;
using Volo.Abp.Identity;
using Volo.Abp.Text.Formatting;
namespace Microsoft.AspNetCore.Identity
namespace Microsoft.AspNetCore.Identity;
public static class AbpIdentityResultExtensions
{
public static class AbpIdentityResultExtensions
private static readonly Dictionary<string, string> IdentityStrings = new Dictionary<string, string>();
static AbpIdentityResultExtensions()
{
private static readonly Dictionary<string, string> IdentityStrings = new Dictionary<string, string>();
var identityResourceManager = new ResourceManager("Microsoft.Extensions.Identity.Core.Resources", typeof(UserManager<>).Assembly);
var resourceSet = identityResourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false);
if (resourceSet == null)
{
throw new AbpException("Can't get the ResourceSet of Identity.");
}
static AbpIdentityResultExtensions()
var iterator = resourceSet.GetEnumerator();
while (true)
{
var identityResourceManager = new ResourceManager("Microsoft.Extensions.Identity.Core.Resources", typeof(UserManager<>).Assembly);
var resourceSet = identityResourceManager.GetResourceSet(CultureInfo.InvariantCulture, true, false);
if (resourceSet == null)
if (!iterator.MoveNext())
{
throw new AbpException("Can't get the ResourceSet of Identity.");
break;
}
var iterator = resourceSet.GetEnumerator();
while (true)
var key = iterator.Key?.ToString();
var value = iterator.Value?.ToString();
if (key != null && value != null)
{
if (!iterator.MoveNext())
{
break;
}
var key = iterator.Key?.ToString();
var value = iterator.Value?.ToString();
if (key != null && value != null)
{
IdentityStrings.Add(key, value);
}
}
if (!IdentityStrings.Any())
{
throw new AbpException("ResourceSet values of Identity is empty.");
IdentityStrings.Add(key, value);
}
}
public static void CheckErrors(this IdentityResult identityResult)
if (!IdentityStrings.Any())
{
if (identityResult.Succeeded)
{
return;
}
if (identityResult.Errors == null)
{
throw new ArgumentException("identityResult.Errors should not be null.");
}
throw new AbpException("ResourceSet values of Identity is empty.");
}
}
throw new AbpIdentityResultException(identityResult);
public static void CheckErrors(this IdentityResult identityResult)
{
if (identityResult.Succeeded)
{
return;
}
public static string[] GetValuesFromErrorMessage(this IdentityResult identityResult, IStringLocalizer localizer)
if (identityResult.Errors == null)
{
if (identityResult.Succeeded)
{
throw new ArgumentException(
"identityResult.Succeeded should be false in order to get values from error.");
}
throw new ArgumentException("identityResult.Errors should not be null.");
}
if (identityResult.Errors == null)
{
throw new ArgumentException("identityResult.Errors should not be null.");
}
throw new AbpIdentityResultException(identityResult);
}
var error = identityResult.Errors.First();
var englishString = IdentityStrings.GetOrDefault(error.Code);
public static string[] GetValuesFromErrorMessage(this IdentityResult identityResult, IStringLocalizer localizer)
{
if (identityResult.Succeeded)
{
throw new ArgumentException(
"identityResult.Succeeded should be false in order to get values from error.");
}
if (englishString == null)
{
return Array.Empty<string>();
}
if (identityResult.Errors == null)
{
throw new ArgumentException("identityResult.Errors should not be null.");
}
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
return values;
}
var error = identityResult.Errors.First();
var englishString = IdentityStrings.GetOrDefault(error.Code);
if (englishString == null)
{
return Array.Empty<string>();
}
public static string LocalizeErrors(this IdentityResult identityResult, IStringLocalizer localizer)
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
if (identityResult.Succeeded)
{
throw new ArgumentException("identityResult.Succeeded should be false in order to localize errors.");
}
return values;
}
if (identityResult.Errors == null)
{
throw new ArgumentException("identityResult.Errors should not be null.");
}
return Array.Empty<string>();
}
return identityResult.Errors.Select(err => LocalizeErrorMessage(err, localizer)).JoinAsString(", ");
public static string LocalizeErrors(this IdentityResult identityResult, IStringLocalizer localizer)
{
if (identityResult.Succeeded)
{
throw new ArgumentException("identityResult.Succeeded should be false in order to localize errors.");
}
public static string LocalizeErrorMessage(this IdentityError error, IStringLocalizer localizer)
if (identityResult.Errors == null)
{
var key = $"Volo.Abp.Identity:{error.Code}";
throw new ArgumentException("identityResult.Errors should not be null.");
}
return identityResult.Errors.Select(err => LocalizeErrorMessage(err, localizer)).JoinAsString(", ");
}
public static string LocalizeErrorMessage(this IdentityError error, IStringLocalizer localizer)
{
var key = $"Volo.Abp.Identity:{error.Code}";
var localizedString = localizer[key];
var localizedString = localizer[key];
if (!localizedString.ResourceNotFound)
if (!localizedString.ResourceNotFound)
{
var englishString = IdentityStrings.GetOrDefault(error.Code);
if (englishString != null)
{
var englishString = IdentityStrings.GetOrDefault(error.Code);
if (englishString != null)
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
if (FormattedStringValueExtracter.IsMatch(error.Description, englishString, out var values))
{
return string.Format(localizedString.Value, values.Cast<object>().ToArray());
}
return string.Format(localizedString.Value, values.Cast<object>().ToArray());
}
}
return localizer["Identity.Default"];
}
public static string GetResultAsString(this SignInResult signInResult)
{
if (signInResult.Succeeded)
{
return "Succeeded";
}
return localizer["Identity.Default"];
}
if (signInResult.IsLockedOut)
{
return "IsLockedOut";
}
public static string GetResultAsString(this SignInResult signInResult)
{
if (signInResult.Succeeded)
{
return "Succeeded";
}
if (signInResult.IsNotAllowed)
{
return "IsNotAllowed";
}
if (signInResult.IsLockedOut)
{
return "IsLockedOut";
}
if (signInResult.RequiresTwoFactor)
{
return "RequiresTwoFactor";
}
if (signInResult.IsNotAllowed)
{
return "IsNotAllowed";
}
return "Unknown";
if (signInResult.RequiresTwoFactor)
{
return "RequiresTwoFactor";
}
return "Unknown";
}
}

49
modules/identity/src/Volo.Abp.Identity.Domain/Microsoft/Extensions/DependencyInjection/AbpIdentityServiceCollectionExtensions.cs

@ -3,37 +3,36 @@ using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.Identity;
namespace Microsoft.Extensions.DependencyInjection
namespace Microsoft.Extensions.DependencyInjection;
public static class AbpIdentityServiceCollectionExtensions
{
public static class AbpIdentityServiceCollectionExtensions
public static IdentityBuilder AddAbpIdentity(this IServiceCollection services)
{
public static IdentityBuilder AddAbpIdentity(this IServiceCollection services)
{
return services.AddAbpIdentity(setupAction: null);
}
return services.AddAbpIdentity(setupAction: null);
}
public static IdentityBuilder AddAbpIdentity(this IServiceCollection services, Action<IdentityOptions> setupAction)
{
//AbpRoleManager
services.TryAddScoped<IdentityRoleManager>();
services.TryAddScoped(typeof(RoleManager<IdentityRole>), provider => provider.GetService(typeof(IdentityRoleManager)));
public static IdentityBuilder AddAbpIdentity(this IServiceCollection services, Action<IdentityOptions> setupAction)
{
//AbpRoleManager
services.TryAddScoped<IdentityRoleManager>();
services.TryAddScoped(typeof(RoleManager<IdentityRole>), provider => provider.GetService(typeof(IdentityRoleManager)));
//AbpUserManager
services.TryAddScoped<IdentityUserManager>();
services.TryAddScoped(typeof(UserManager<IdentityUser>), provider => provider.GetService(typeof(IdentityUserManager)));
//AbpUserManager
services.TryAddScoped<IdentityUserManager>();
services.TryAddScoped(typeof(UserManager<IdentityUser>), provider => provider.GetService(typeof(IdentityUserManager)));
//AbpUserStore
services.TryAddScoped<IdentityUserStore>();
services.TryAddScoped(typeof(IUserStore<IdentityUser>), provider => provider.GetService(typeof(IdentityUserStore)));
//AbpUserStore
services.TryAddScoped<IdentityUserStore>();
services.TryAddScoped(typeof(IUserStore<IdentityUser>), provider => provider.GetService(typeof(IdentityUserStore)));
//AbpRoleStore
services.TryAddScoped<IdentityRoleStore>();
services.TryAddScoped(typeof(IRoleStore<IdentityRole>), provider => provider.GetService(typeof(IdentityRoleStore)));
//AbpRoleStore
services.TryAddScoped<IdentityRoleStore>();
services.TryAddScoped(typeof(IRoleStore<IdentityRole>), provider => provider.GetService(typeof(IdentityRoleStore)));
return services
.AddIdentityCore<IdentityUser>(setupAction)
.AddRoles<IdentityRole>()
.AddClaimsPrincipalFactory<AbpUserClaimsPrincipalFactory>();
}
return services
.AddIdentityCore<IdentityUser>(setupAction)
.AddRoles<IdentityRole>()
.AddClaimsPrincipalFactory<AbpUserClaimsPrincipalFactory>();
}
}

13
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDbProperties.cs

@ -1,13 +1,12 @@
using Volo.Abp.Data;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public static class AbpIdentityDbProperties
{
public static class AbpIdentityDbProperties
{
public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix;
public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix;
public static string DbSchema { get; set; } = AbpCommonDbProperties.DbSchema;
public static string DbSchema { get; set; } = AbpCommonDbProperties.DbSchema;
public const string ConnectionStringName = "AbpIdentity";
}
public const string ConnectionStringName = "AbpIdentity";
}

127
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityDomainModule.cs

@ -13,84 +13,83 @@ using Volo.Abp.Security.Claims;
using Volo.Abp.Threading;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpIdentityDomainSharedModule),
typeof(AbpUsersDomainModule),
typeof(AbpAutoMapperModule)
)]
public class AbpIdentityDomainModule : AbpModule
{
[DependsOn(
typeof(AbpDddDomainModule),
typeof(AbpIdentityDomainSharedModule),
typeof(AbpUsersDomainModule),
typeof(AbpAutoMapperModule)
)]
public class AbpIdentityDomainModule : AbpModule
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
public override void ConfigureServices(ServiceConfigurationContext context)
{
private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner();
context.Services.AddAutoMapperObjectMapper<AbpIdentityDomainModule>();
public override void ConfigureServices(ServiceConfigurationContext context)
Configure<AbpAutoMapperOptions>(options =>
{
context.Services.AddAutoMapperObjectMapper<AbpIdentityDomainModule>();
options.AddProfile<IdentityDomainMappingProfile>(validate: true);
});
Configure<AbpAutoMapperOptions>(options =>
{
options.AddProfile<IdentityDomainMappingProfile>(validate: true);
});
Configure<AbpDistributedEntityEventOptions>(options =>
{
options.EtoMappings.Add<IdentityUser, UserEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<IdentityClaimType, IdentityClaimTypeEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<IdentityRole, IdentityRoleEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<OrganizationUnit, OrganizationUnitEto>(typeof(AbpIdentityDomainModule));
Configure<AbpDistributedEntityEventOptions>(options =>
{
options.EtoMappings.Add<IdentityUser, UserEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<IdentityClaimType, IdentityClaimTypeEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<IdentityRole, IdentityRoleEto>(typeof(AbpIdentityDomainModule));
options.EtoMappings.Add<OrganizationUnit, OrganizationUnitEto>(typeof(AbpIdentityDomainModule));
options.AutoEventSelectors.Add<IdentityUser>();
options.AutoEventSelectors.Add<IdentityRole>();
});
options.AutoEventSelectors.Add<IdentityUser>();
options.AutoEventSelectors.Add<IdentityRole>();
});
var identityBuilder = context.Services.AddAbpIdentity(options =>
{
options.User.RequireUniqueEmail = true;
});
var identityBuilder = context.Services.AddAbpIdentity(options =>
{
options.User.RequireUniqueEmail = true;
});
context.Services.AddObjectAccessor(identityBuilder);
context.Services.ExecutePreConfiguredActions(identityBuilder);
context.Services.AddObjectAccessor(identityBuilder);
context.Services.ExecutePreConfiguredActions(identityBuilder);
Configure<IdentityOptions>(options =>
{
options.ClaimsIdentity.UserIdClaimType = AbpClaimTypes.UserId;
options.ClaimsIdentity.UserNameClaimType = AbpClaimTypes.UserName;
options.ClaimsIdentity.RoleClaimType = AbpClaimTypes.Role;
});
Configure<IdentityOptions>(options =>
{
options.ClaimsIdentity.UserIdClaimType = AbpClaimTypes.UserId;
options.ClaimsIdentity.UserNameClaimType = AbpClaimTypes.UserName;
options.ClaimsIdentity.RoleClaimType = AbpClaimTypes.Role;
});
context.Services.AddAbpDynamicOptions<IdentityOptions, AbpIdentityOptionsManager>();
}
context.Services.AddAbpDynamicOptions<IdentityOptions, AbpIdentityOptionsManager>();
}
public override void PostConfigureServices(ServiceConfigurationContext context)
public override void PostConfigureServices(ServiceConfigurationContext context)
{
OneTimeRunner.Run(() =>
{
OneTimeRunner.Run(() =>
{
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
typeof(IdentityUser)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.User,
typeof(IdentityUser)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
typeof(IdentityRole)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.Role,
typeof(IdentityRole)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.ClaimType,
typeof(IdentityClaimType)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.ClaimType,
typeof(IdentityClaimType)
);
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
typeof(OrganizationUnit)
);
});
}
ModuleExtensionConfigurationHelper.ApplyEntityConfigurationToEntity(
IdentityModuleExtensionConsts.ModuleName,
IdentityModuleExtensionConsts.EntityNames.OrganizationUnit,
typeof(OrganizationUnit)
);
});
}
}

15
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptions.cs

@ -1,12 +1,11 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class AbpIdentityOptions
{
public class AbpIdentityOptions
{
public ExternalLoginProviderDictionary ExternalLoginProviders { get; }
public ExternalLoginProviderDictionary ExternalLoginProviders { get; }
public AbpIdentityOptions()
{
ExternalLoginProviders = new ExternalLoginProviderDictionary();
}
public AbpIdentityOptions()
{
ExternalLoginProviders = new ExternalLoginProviderDictionary();
}
}

47
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityOptionsManager.cs

@ -6,34 +6,33 @@ using Volo.Abp.Identity.Settings;
using Volo.Abp.Options;
using Volo.Abp.Settings;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class AbpIdentityOptionsManager : AbpDynamicOptionsManager<IdentityOptions>
{
public class AbpIdentityOptionsManager : AbpDynamicOptionsManager<IdentityOptions>
{
protected ISettingProvider SettingProvider { get; }
protected ISettingProvider SettingProvider { get; }
public AbpIdentityOptionsManager(IOptionsFactory<IdentityOptions> factory,
ISettingProvider settingProvider)
: base(factory)
{
SettingProvider = settingProvider;
}
public AbpIdentityOptionsManager(IOptionsFactory<IdentityOptions> factory,
ISettingProvider settingProvider)
: base(factory)
{
SettingProvider = settingProvider;
}
protected override async Task OverrideOptionsAsync(string name, IdentityOptions options)
{
options.Password.RequiredLength = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength);
options.Password.RequiredUniqueChars = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars);
options.Password.RequireNonAlphanumeric = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric);
options.Password.RequireLowercase = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase);
options.Password.RequireUppercase = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase);
options.Password.RequireDigit = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit);
protected override async Task OverrideOptionsAsync(string name, IdentityOptions options)
{
options.Password.RequiredLength = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequiredLength, options.Password.RequiredLength);
options.Password.RequiredUniqueChars = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequiredUniqueChars, options.Password.RequiredUniqueChars);
options.Password.RequireNonAlphanumeric = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, options.Password.RequireNonAlphanumeric);
options.Password.RequireLowercase = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireLowercase, options.Password.RequireLowercase);
options.Password.RequireUppercase = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireUppercase, options.Password.RequireUppercase);
options.Password.RequireDigit = await SettingProvider.GetAsync(IdentitySettingNames.Password.RequireDigit, options.Password.RequireDigit);
options.Lockout.AllowedForNewUsers = await SettingProvider.GetAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers);
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(await SettingProvider.GetAsync(IdentitySettingNames.Lockout.LockoutDuration, options.Lockout.DefaultLockoutTimeSpan.TotalSeconds.To<int>()));
options.Lockout.MaxFailedAccessAttempts = await SettingProvider.GetAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts);
options.Lockout.AllowedForNewUsers = await SettingProvider.GetAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, options.Lockout.AllowedForNewUsers);
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromSeconds(await SettingProvider.GetAsync(IdentitySettingNames.Lockout.LockoutDuration, options.Lockout.DefaultLockoutTimeSpan.TotalSeconds.To<int>()));
options.Lockout.MaxFailedAccessAttempts = await SettingProvider.GetAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, options.Lockout.MaxFailedAccessAttempts);
options.SignIn.RequireConfirmedEmail = await SettingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail);
options.SignIn.RequireConfirmedPhoneNumber = await SettingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber);
}
options.SignIn.RequireConfirmedEmail = await SettingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, options.SignIn.RequireConfirmedEmail);
options.SignIn.RequireConfirmedPhoneNumber = await SettingProvider.GetAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, options.SignIn.RequireConfirmedPhoneNumber);
}
}

55
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentityResultException.cs

@ -9,44 +9,43 @@ using Volo.Abp.ExceptionHandling;
using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
[Serializable]
public class AbpIdentityResultException : BusinessException, ILocalizeErrorMessage
{
[Serializable]
public class AbpIdentityResultException : BusinessException, ILocalizeErrorMessage
public IdentityResult IdentityResult { get; }
public AbpIdentityResultException([NotNull] IdentityResult identityResult)
: base(
code: $"Volo.Abp.Identity:{identityResult.Errors.First().Code}",
message: identityResult.Errors.Select(err => err.Description).JoinAsString(", "))
{
public IdentityResult IdentityResult { get; }
IdentityResult = Check.NotNull(identityResult, nameof(identityResult));
}
public AbpIdentityResultException([NotNull] IdentityResult identityResult)
: base(
code: $"Volo.Abp.Identity:{identityResult.Errors.First().Code}",
message: identityResult.Errors.Select(err => err.Description).JoinAsString(", "))
{
IdentityResult = Check.NotNull(identityResult, nameof(identityResult));
}
public AbpIdentityResultException(SerializationInfo serializationInfo, StreamingContext context)
: base(serializationInfo, context)
{
public AbpIdentityResultException(SerializationInfo serializationInfo, StreamingContext context)
: base(serializationInfo, context)
{
}
}
public virtual string LocalizeMessage(LocalizationContext context)
{
var localizer = context.LocalizerFactory.Create<IdentityResource>();
public virtual string LocalizeMessage(LocalizationContext context)
{
var localizer = context.LocalizerFactory.Create<IdentityResource>();
SetData(localizer);
SetData(localizer);
return IdentityResult.LocalizeErrors(localizer);
}
return IdentityResult.LocalizeErrors(localizer);
}
protected virtual void SetData(IStringLocalizer localizer)
{
var values = IdentityResult.GetValuesFromErrorMessage(localizer);
protected virtual void SetData(IStringLocalizer localizer)
for (var index = 0; index < values.Length; index++)
{
var values = IdentityResult.GetValuesFromErrorMessage(localizer);
for (var index = 0; index < values.Length; index++)
{
Data[index.ToString()] = values[index];
}
Data[index.ToString()] = values[index];
}
}
}

201
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpIdentitySettingDefinitionProvider.cs

@ -3,121 +3,120 @@ using Volo.Abp.Identity.Settings;
using Volo.Abp.Localization;
using Volo.Abp.Settings;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class AbpIdentitySettingDefinitionProvider : SettingDefinitionProvider
{
public class AbpIdentitySettingDefinitionProvider : SettingDefinitionProvider
public override void Define(ISettingDefinitionContext context)
{
public override void Define(ISettingDefinitionContext context)
{
context.Add(
new SettingDefinition(
IdentitySettingNames.Password.RequiredLength,
6.ToString(),
L("DisplayName:Abp.Identity.Password.RequiredLength"),
L("Description:Abp.Identity.Password.RequiredLength"),
true),
context.Add(
new SettingDefinition(
IdentitySettingNames.Password.RequiredLength,
6.ToString(),
L("DisplayName:Abp.Identity.Password.RequiredLength"),
L("Description:Abp.Identity.Password.RequiredLength"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequiredUniqueChars,
1.ToString(),
L("DisplayName:Abp.Identity.Password.RequiredUniqueChars"),
L("Description:Abp.Identity.Password.RequiredUniqueChars"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequiredUniqueChars,
1.ToString(),
L("DisplayName:Abp.Identity.Password.RequiredUniqueChars"),
L("Description:Abp.Identity.Password.RequiredUniqueChars"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireNonAlphanumeric,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireNonAlphanumeric"),
L("Description:Abp.Identity.Password.RequireNonAlphanumeric"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireNonAlphanumeric,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireNonAlphanumeric"),
L("Description:Abp.Identity.Password.RequireNonAlphanumeric"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireLowercase,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireLowercase"),
L("Description:Abp.Identity.Password.RequireLowercase"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireLowercase,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireLowercase"),
L("Description:Abp.Identity.Password.RequireLowercase"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireUppercase,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireUppercase"),
L("Description:Abp.Identity.Password.RequireUppercase"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireUppercase,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireUppercase"),
L("Description:Abp.Identity.Password.RequireUppercase"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireDigit,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireDigit"),
L("Description:Abp.Identity.Password.RequireDigit"),
true),
new SettingDefinition(
IdentitySettingNames.Password.RequireDigit,
true.ToString(),
L("DisplayName:Abp.Identity.Password.RequireDigit"),
L("Description:Abp.Identity.Password.RequireDigit"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.AllowedForNewUsers,
true.ToString(),
L("DisplayName:Abp.Identity.Lockout.AllowedForNewUsers"),
L("Description:Abp.Identity.Lockout.AllowedForNewUsers"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.AllowedForNewUsers,
true.ToString(),
L("DisplayName:Abp.Identity.Lockout.AllowedForNewUsers"),
L("Description:Abp.Identity.Lockout.AllowedForNewUsers"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.LockoutDuration,
(5 * 60).ToString(),
L("DisplayName:Abp.Identity.Lockout.LockoutDuration"),
L("Description:Abp.Identity.Lockout.LockoutDuration"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.LockoutDuration,
(5 * 60).ToString(),
L("DisplayName:Abp.Identity.Lockout.LockoutDuration"),
L("Description:Abp.Identity.Lockout.LockoutDuration"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.MaxFailedAccessAttempts,
5.ToString(),
L("DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts"),
L("Description:Abp.Identity.Lockout.MaxFailedAccessAttempts"),
true),
new SettingDefinition(
IdentitySettingNames.Lockout.MaxFailedAccessAttempts,
5.ToString(),
L("DisplayName:Abp.Identity.Lockout.MaxFailedAccessAttempts"),
L("Description:Abp.Identity.Lockout.MaxFailedAccessAttempts"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.RequireConfirmedEmail,
false.ToString(),
L("DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail"),
L("Description:Abp.Identity.SignIn.RequireConfirmedEmail"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation,
true.ToString(),
L("DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation"),
L("Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber,
false.ToString(),
L("DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber"),
L("Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.RequireConfirmedEmail,
false.ToString(),
L("DisplayName:Abp.Identity.SignIn.RequireConfirmedEmail"),
L("Description:Abp.Identity.SignIn.RequireConfirmedEmail"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation,
true.ToString(),
L("DisplayName:Abp.Identity.SignIn.EnablePhoneNumberConfirmation"),
L("Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation"),
true),
new SettingDefinition(
IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber,
false.ToString(),
L("DisplayName:Abp.Identity.SignIn.RequireConfirmedPhoneNumber"),
L("Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber"),
true),
new SettingDefinition(
IdentitySettingNames.User.IsUserNameUpdateEnabled,
true.ToString(),
L("DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled"),
L("Description:Abp.Identity.User.IsUserNameUpdateEnabled"),
true),
new SettingDefinition(
IdentitySettingNames.User.IsUserNameUpdateEnabled,
true.ToString(),
L("DisplayName:Abp.Identity.User.IsUserNameUpdateEnabled"),
L("Description:Abp.Identity.User.IsUserNameUpdateEnabled"),
true),
new SettingDefinition(
IdentitySettingNames.User.IsEmailUpdateEnabled,
true.ToString(),
L("DisplayName:Abp.Identity.User.IsEmailUpdateEnabled"),
L("Description:Abp.Identity.User.IsEmailUpdateEnabled"),
true),
new SettingDefinition(
IdentitySettingNames.User.IsEmailUpdateEnabled,
true.ToString(),
L("DisplayName:Abp.Identity.User.IsEmailUpdateEnabled"),
L("Description:Abp.Identity.User.IsEmailUpdateEnabled"),
true),
new SettingDefinition(
IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount,
int.MaxValue.ToString(),
L("Identity.OrganizationUnit.MaxUserMembershipCount"),
L("Identity.OrganizationUnit.MaxUserMembershipCount"),
true)
);
}
new SettingDefinition(
IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount,
int.MaxValue.ToString(),
L("Identity.OrganizationUnit.MaxUserMembershipCount"),
L("Identity.OrganizationUnit.MaxUserMembershipCount"),
true)
);
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<IdentityResource>(name);
}
private static LocalizableString L(string name)
{
return LocalizableString.Create<IdentityResource>(name);
}
}

103
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/AbpUserClaimsPrincipalFactory.cs

@ -9,71 +9,70 @@ using Volo.Abp.DependencyInjection;
using Volo.Abp.Security.Claims;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>,
ITransientDependency
{
public class AbpUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser, IdentityRole>,
ITransientDependency
protected ICurrentPrincipalAccessor CurrentPrincipalAccessor { get; }
protected IAbpClaimsPrincipalFactory AbpClaimsPrincipalFactory { get; }
public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options,
ICurrentPrincipalAccessor currentPrincipalAccessor,
IAbpClaimsPrincipalFactory abpClaimsPrincipalFactory)
: base(
userManager,
roleManager,
options)
{
CurrentPrincipalAccessor = currentPrincipalAccessor;
AbpClaimsPrincipalFactory = abpClaimsPrincipalFactory;
}
[UnitOfWork]
public override async Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
{
protected ICurrentPrincipalAccessor CurrentPrincipalAccessor { get; }
protected IAbpClaimsPrincipalFactory AbpClaimsPrincipalFactory { get; }
var principal = await base.CreateAsync(user);
var identity = principal.Identities.First();
public AbpUserClaimsPrincipalFactory(
UserManager<IdentityUser> userManager,
RoleManager<IdentityRole> roleManager,
IOptions<IdentityOptions> options,
ICurrentPrincipalAccessor currentPrincipalAccessor,
IAbpClaimsPrincipalFactory abpClaimsPrincipalFactory)
: base(
userManager,
roleManager,
options)
if (user.TenantId.HasValue)
{
CurrentPrincipalAccessor = currentPrincipalAccessor;
AbpClaimsPrincipalFactory = abpClaimsPrincipalFactory;
identity.AddIfNotContains(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
}
[UnitOfWork]
public override async Task<ClaimsPrincipal> CreateAsync(IdentityUser user)
if (!user.Name.IsNullOrWhiteSpace())
{
var principal = await base.CreateAsync(user);
var identity = principal.Identities.First();
if (user.TenantId.HasValue)
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString()));
}
if (!user.Name.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.Name, user.Name));
}
if (!user.Surname.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.SurName, user.Surname));
}
identity.AddIfNotContains(new Claim(AbpClaimTypes.Name, user.Name));
}
if (!user.PhoneNumber.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumber, user.PhoneNumber));
}
if (!user.Surname.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.SurName, user.Surname));
}
identity.AddIfNotContains(
new Claim(AbpClaimTypes.PhoneNumberVerified, user.PhoneNumberConfirmed.ToString()));
if (!user.PhoneNumber.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.PhoneNumber, user.PhoneNumber));
}
if (!user.Email.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.Email, user.Email));
}
identity.AddIfNotContains(
new Claim(AbpClaimTypes.PhoneNumberVerified, user.PhoneNumberConfirmed.ToString()));
identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
if (!user.Email.IsNullOrWhiteSpace())
{
identity.AddIfNotContains(new Claim(AbpClaimTypes.Email, user.Email));
}
using (CurrentPrincipalAccessor.Change(identity))
{
await AbpClaimsPrincipalFactory.CreateAsync(principal);
}
identity.AddIfNotContains(new Claim(AbpClaimTypes.EmailVerified, user.EmailConfirmed.ToString()));
return principal;
using (CurrentPrincipalAccessor.Change(identity))
{
await AbpClaimsPrincipalFactory.CreateAsync(principal);
}
return principal;
}
}

231
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderBase.cs

@ -7,158 +7,157 @@ using Volo.Abp.Domain.Repositories;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public abstract class ExternalLoginProviderBase : IExternalLoginProvider
{
public abstract class ExternalLoginProviderBase : IExternalLoginProvider
protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IdentityUserManager UserManager { get; }
protected IIdentityUserRepository IdentityUserRepository { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
protected ExternalLoginProviderBase(
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IdentityUserManager userManager,
IIdentityUserRepository identityUserRepository,
IOptions<IdentityOptions> identityOptions)
{
protected IGuidGenerator GuidGenerator { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IdentityUserManager UserManager { get; }
protected IIdentityUserRepository IdentityUserRepository { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
protected ExternalLoginProviderBase(
IGuidGenerator guidGenerator,
ICurrentTenant currentTenant,
IdentityUserManager userManager,
IIdentityUserRepository identityUserRepository,
IOptions<IdentityOptions> identityOptions)
{
GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
UserManager = userManager;
IdentityUserRepository = identityUserRepository;
IdentityOptions = identityOptions;
}
GuidGenerator = guidGenerator;
CurrentTenant = currentTenant;
UserManager = userManager;
IdentityUserRepository = identityUserRepository;
IdentityOptions = identityOptions;
}
public abstract Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
public abstract Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
public virtual async Task<IdentityUser> CreateUserAsync(string userName, string providerName)
{
await IdentityOptions.SetAsync();
public virtual async Task<IdentityUser> CreateUserAsync(string userName, string providerName)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(userName);
NormalizeExternalLoginUserInfo(externalUser, userName);
var externalUser = await GetUserInfoAsync(userName);
NormalizeExternalLoginUserInfo(externalUser, userName);
var user = new IdentityUser(
GuidGenerator.Create(),
userName,
externalUser.Email,
tenantId: CurrentTenant.Id
);
var user = new IdentityUser(
GuidGenerator.Create(),
userName,
externalUser.Email,
tenantId: CurrentTenant.Id
);
user.Name = externalUser.Name;
user.Surname = externalUser.Surname;
user.Name = externalUser.Name;
user.Surname = externalUser.Surname;
user.IsExternal = true;
user.IsExternal = true;
user.SetEmailConfirmed(externalUser.EmailConfirmed ?? false);
user.SetPhoneNumber(externalUser.PhoneNumber, externalUser.PhoneNumberConfirmed ?? false);
user.SetEmailConfirmed(externalUser.EmailConfirmed ?? false);
user.SetPhoneNumber(externalUser.PhoneNumber, externalUser.PhoneNumberConfirmed ?? false);
(await UserManager.CreateAsync(user)).CheckErrors();
(await UserManager.CreateAsync(user)).CheckErrors();
if (externalUser.TwoFactorEnabled != null)
{
(await UserManager.SetTwoFactorEnabledAsync(user, externalUser.TwoFactorEnabled.Value)).CheckErrors();
}
if (externalUser.TwoFactorEnabled != null)
{
(await UserManager.SetTwoFactorEnabledAsync(user, externalUser.TwoFactorEnabled.Value)).CheckErrors();
}
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
(await UserManager.AddLoginAsync(
user,
new UserLoginInfo(
providerName,
externalUser.ProviderKey ,
providerName
)
(await UserManager.AddDefaultRolesAsync(user)).CheckErrors();
(await UserManager.AddLoginAsync(
user,
new UserLoginInfo(
providerName,
externalUser.ProviderKey,
providerName
)
).CheckErrors();
)
).CheckErrors();
return user;
}
return user;
}
public virtual async Task UpdateUserAsync(IdentityUser user, string providerName)
{
await IdentityOptions.SetAsync();
public virtual async Task UpdateUserAsync(IdentityUser user, string providerName)
{
await IdentityOptions.SetAsync();
var externalUser = await GetUserInfoAsync(user);
NormalizeExternalLoginUserInfo(externalUser, user.UserName);
var externalUser = await GetUserInfoAsync(user);
NormalizeExternalLoginUserInfo(externalUser, user.UserName);
if (!externalUser.Name.IsNullOrWhiteSpace())
{
user.Name = externalUser.Name;
}
if (!externalUser.Name.IsNullOrWhiteSpace())
{
user.Name = externalUser.Name;
}
if (!externalUser.Surname.IsNullOrWhiteSpace())
{
user.Surname = externalUser.Surname;
}
if (!externalUser.Surname.IsNullOrWhiteSpace())
{
user.Surname = externalUser.Surname;
}
if (user.PhoneNumber != externalUser.PhoneNumber)
if (user.PhoneNumber != externalUser.PhoneNumber)
{
if (!externalUser.PhoneNumber.IsNullOrWhiteSpace())
{
if (!externalUser.PhoneNumber.IsNullOrWhiteSpace())
{
await UserManager.SetPhoneNumberAsync(user, externalUser.PhoneNumber);
user.SetPhoneNumberConfirmed(externalUser.PhoneNumberConfirmed == true);
}
await UserManager.SetPhoneNumberAsync(user, externalUser.PhoneNumber);
user.SetPhoneNumberConfirmed(externalUser.PhoneNumberConfirmed == true);
}
else
}
else
{
if (!user.PhoneNumber.IsNullOrWhiteSpace() &&
user.PhoneNumberConfirmed == false &&
externalUser.PhoneNumberConfirmed == true)
{
if (!user.PhoneNumber.IsNullOrWhiteSpace() &&
user.PhoneNumberConfirmed == false &&
externalUser.PhoneNumberConfirmed == true)
{
user.SetPhoneNumberConfirmed(true);
}
user.SetPhoneNumberConfirmed(true);
}
}
if (!string.Equals(user.Email, externalUser.Email, StringComparison.OrdinalIgnoreCase))
{
(await UserManager.SetEmailAsync(user, externalUser.Email)).CheckErrors();
user.SetEmailConfirmed(externalUser.EmailConfirmed ?? false);
}
if (!string.Equals(user.Email, externalUser.Email, StringComparison.OrdinalIgnoreCase))
{
(await UserManager.SetEmailAsync(user, externalUser.Email)).CheckErrors();
user.SetEmailConfirmed(externalUser.EmailConfirmed ?? false);
}
if (externalUser.TwoFactorEnabled != null)
{
(await UserManager.SetTwoFactorEnabledAsync(user, externalUser.TwoFactorEnabled.Value)).CheckErrors();
}
if (externalUser.TwoFactorEnabled != null)
{
(await UserManager.SetTwoFactorEnabledAsync(user, externalUser.TwoFactorEnabled.Value)).CheckErrors();
}
await IdentityUserRepository.EnsureCollectionLoadedAsync(user, u => u.Logins);
await IdentityUserRepository.EnsureCollectionLoadedAsync(user, u => u.Logins);
var userLogin = user.Logins.FirstOrDefault(l => l.LoginProvider == providerName);
if (userLogin != null)
{
if (userLogin.ProviderKey != externalUser.ProviderKey)
{
(await UserManager.RemoveLoginAsync(user, providerName, userLogin.ProviderKey)).CheckErrors();
(await UserManager.AddLoginAsync(user, new UserLoginInfo(providerName, externalUser.ProviderKey, providerName))).CheckErrors();
}
}
else
var userLogin = user.Logins.FirstOrDefault(l => l.LoginProvider == providerName);
if (userLogin != null)
{
if (userLogin.ProviderKey != externalUser.ProviderKey)
{
(await UserManager.RemoveLoginAsync(user, providerName, userLogin.ProviderKey)).CheckErrors();
(await UserManager.AddLoginAsync(user, new UserLoginInfo(providerName, externalUser.ProviderKey, providerName))).CheckErrors();
}
}
else
{
(await UserManager.AddLoginAsync(user, new UserLoginInfo(providerName, externalUser.ProviderKey, providerName))).CheckErrors();
}
user.IsExternal = true;
user.IsExternal = true;
(await UserManager.UpdateAsync(user)).CheckErrors();
}
(await UserManager.UpdateAsync(user)).CheckErrors();
}
protected abstract Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName);
protected abstract Task<ExternalLoginUserInfo> GetUserInfoAsync(string userName);
protected virtual Task<ExternalLoginUserInfo> GetUserInfoAsync(IdentityUser user)
{
return GetUserInfoAsync(user.UserName);
}
protected virtual Task<ExternalLoginUserInfo> GetUserInfoAsync(IdentityUser user)
{
return GetUserInfoAsync(user.UserName);
}
private static void NormalizeExternalLoginUserInfo(
ExternalLoginUserInfo externalUser,
string userName
)
private static void NormalizeExternalLoginUserInfo(
ExternalLoginUserInfo externalUser,
string userName
)
{
if (externalUser.ProviderKey.IsNullOrWhiteSpace())
{
if (externalUser.ProviderKey.IsNullOrWhiteSpace())
{
externalUser.ProviderKey = userName;
}
externalUser.ProviderKey = userName;
}
}
}

19
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderDictionary.cs

@ -1,17 +1,16 @@
using System.Collections.Generic;
using JetBrains.Annotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class ExternalLoginProviderDictionary : Dictionary<string, ExternalLoginProviderInfo>
{
public class ExternalLoginProviderDictionary : Dictionary<string, ExternalLoginProviderInfo>
/// <summary>
/// Adds or replaces a provider.
/// </summary>
public void Add<TProvider>([NotNull] string name)
where TProvider : IExternalLoginProvider
{
/// <summary>
/// Adds or replaces a provider.
/// </summary>
public void Add<TProvider>([NotNull] string name)
where TProvider : IExternalLoginProvider
{
this[name] = new ExternalLoginProviderInfo(name, typeof(TProvider));
}
this[name] = new ExternalLoginProviderInfo(name, typeof(TProvider));
}
}

32
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginProviderInfo.cs

@ -1,25 +1,23 @@
using System;
using JetBrains.Annotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class ExternalLoginProviderInfo
{
public class ExternalLoginProviderInfo
{
public string Name { get; }
public string Name { get; }
public Type Type
{
get => _type;
set => _type = Check.NotNull(value, nameof(value));
}
private Type _type;
public Type Type {
get => _type;
set => _type = Check.NotNull(value, nameof(value));
}
private Type _type;
public ExternalLoginProviderInfo(
[NotNull] string name,
[NotNull] Type type)
{
Name = Check.NotNullOrWhiteSpace(name, nameof(name));
Type = Check.AssignableTo<IExternalLoginProvider>(type, nameof(type));
}
public ExternalLoginProviderInfo(
[NotNull] string name,
[NotNull] Type type)
{
Name = Check.NotNullOrWhiteSpace(name, nameof(name));
Type = Check.AssignableTo<IExternalLoginProvider>(type, nameof(type));
}
}

45
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/ExternalLoginUserInfo.cs

@ -1,36 +1,35 @@
using JetBrains.Annotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class ExternalLoginUserInfo
{
public class ExternalLoginUserInfo
{
[CanBeNull]
public string Name { get; set; }
[CanBeNull]
public string Name { get; set; }
[CanBeNull]
public string Surname { get; set; }
[CanBeNull]
public string Surname { get; set; }
[CanBeNull]
public string PhoneNumber { get; set; }
[CanBeNull]
public string PhoneNumber { get; set; }
[NotNull]
public string Email { get; private set; }
[NotNull]
public string Email { get; private set; }
[CanBeNull]
public bool? PhoneNumberConfirmed { get; set; }
[CanBeNull]
public bool? PhoneNumberConfirmed { get; set; }
[CanBeNull]
public bool? EmailConfirmed { get; set; }
[CanBeNull]
public bool? EmailConfirmed { get; set; }
[CanBeNull]
public bool? TwoFactorEnabled { get; set; }
[CanBeNull]
public bool? TwoFactorEnabled { get; set; }
[CanBeNull]
public string ProviderKey { get; set; }
[CanBeNull]
public string ProviderKey { get; set; }
public ExternalLoginUserInfo([NotNull] string email)
{
Email = Check.NotNullOrWhiteSpace(email, nameof(email));
}
public ExternalLoginUserInfo([NotNull] string email)
{
Email = Check.NotNullOrWhiteSpace(email, nameof(email));
}
}

51
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IExternalLoginProvider.cs

@ -1,32 +1,31 @@
using System.Threading.Tasks;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IExternalLoginProvider
{
public interface IExternalLoginProvider
{
/// <summary>
/// Used to try authenticate a user by this source.
/// </summary>
/// <param name="userName">User name or email address</param>
/// <param name="plainPassword">Plain password of the user</param>
/// <returns>True, indicates that this used has authenticated by this source</returns>
Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
/// <summary>
/// Used to try authenticate a user by this source.
/// </summary>
/// <param name="userName">User name or email address</param>
/// <param name="plainPassword">Plain password of the user</param>
/// <returns>True, indicates that this used has authenticated by this source</returns>
Task<bool> TryAuthenticateAsync(string userName, string plainPassword);
/// <summary>
/// This method is called when a user is authenticated by this source but the user does not exists yet.
/// So, the source should create the user and fill the properties.
/// </summary>
/// <param name="userName">User name</param>
/// <param name="providerName">The name of this provider</param>
/// <returns>Newly created user</returns>
Task<IdentityUser> CreateUserAsync(string userName, string providerName);
/// <summary>
/// This method is called when a user is authenticated by this source but the user does not exists yet.
/// So, the source should create the user and fill the properties.
/// </summary>
/// <param name="userName">User name</param>
/// <param name="providerName">The name of this provider</param>
/// <returns>Newly created user</returns>
Task<IdentityUser> CreateUserAsync(string userName, string providerName);
/// <summary>
/// This method is called after an existing user is authenticated by this source.
/// It can be used to update some properties of the user by the source.
/// </summary>
/// <param name="providerName">The name of this provider</param>
/// <param name="user">The user that can be updated</param>
Task UpdateUserAsync(IdentityUser user, string providerName);
}
/// <summary>
/// This method is called after an existing user is authenticated by this source.
/// It can be used to update some properties of the user by the source.
/// </summary>
/// <param name="providerName">The name of this provider</param>
/// <param name="user">The user that can be updated</param>
Task UpdateUserAsync(IdentityUser user, string providerName);
}

59
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIDentityClaimTypeRepository.cs

@ -4,36 +4,35 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityClaimTypeRepository : IBasicRepository<IdentityClaimType, Guid>
{
public interface IIdentityClaimTypeRepository : IBasicRepository<IdentityClaimType, Guid>
{
/// <summary>
/// Checks if there is a <see cref="IdentityClaimType"/> entity with given name.
/// </summary>
/// <param name="name">Name to check</param>
/// <param name="ignoredId">
/// An Id value to ignore on checking.
/// If there is an entity with given <paramref name="ignoredId"/> it's ignored.
/// </param>
/// <param name="cancellationToken">Cancel token</param>
Task<bool> AnyAsync(
string name,
Guid? ignoredId = null,
CancellationToken cancellationToken = default
);
/// <summary>
/// Checks if there is a <see cref="IdentityClaimType"/> entity with given name.
/// </summary>
/// <param name="name">Name to check</param>
/// <param name="ignoredId">
/// An Id value to ignore on checking.
/// If there is an entity with given <paramref name="ignoredId"/> it's ignored.
/// </param>
/// <param name="cancellationToken">Cancel token</param>
Task<bool> AnyAsync(
string name,
Guid? ignoredId = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityClaimType>> GetListAsync(
string sorting,
int maxResultCount,
int skipCount,
string filter,
CancellationToken cancellationToken = default
);
Task<List<IdentityClaimType>> GetListAsync(
string sorting,
int maxResultCount,
int skipCount,
string filter,
CancellationToken cancellationToken = default
);
Task<long> GetCountAsync(
string filter = null,
CancellationToken cancellationToken = default
);
}
}
Task<long> GetCountAsync(
string filter = null,
CancellationToken cancellationToken = default
);
}

17
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityDataSeeder.cs

@ -2,13 +2,12 @@
using System.Threading.Tasks;
using JetBrains.Annotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityDataSeeder
{
public interface IIdentityDataSeeder
{
Task<IdentityDataSeedResult> SeedAsync(
[NotNull] string adminEmail,
[NotNull] string adminPassword,
Guid? tenantId = null);
}
}
Task<IdentityDataSeedResult> SeedAsync(
[NotNull] string adminEmail,
[NotNull] string adminPassword,
Guid? tenantId = null);
}

29
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityLinkUserRepository.cs

@ -4,22 +4,21 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityLinkUserRepository : IBasicRepository<IdentityLinkUser, Guid>
{
public interface IIdentityLinkUserRepository : IBasicRepository<IdentityLinkUser, Guid>
{
Task<IdentityLinkUser> FindAsync(
IdentityLinkUserInfo sourceLinkUserInfo,
IdentityLinkUserInfo targetLinkUserInfo,
CancellationToken cancellationToken = default);
Task<IdentityLinkUser> FindAsync(
IdentityLinkUserInfo sourceLinkUserInfo,
IdentityLinkUserInfo targetLinkUserInfo,
CancellationToken cancellationToken = default);
Task<List<IdentityLinkUser>> GetListAsync(
IdentityLinkUserInfo linkUserInfo,
List<IdentityLinkUserInfo> excludes = null,
CancellationToken cancellationToken = default);
Task<List<IdentityLinkUser>> GetListAsync(
IdentityLinkUserInfo linkUserInfo,
List<IdentityLinkUserInfo> excludes = null,
CancellationToken cancellationToken = default);
Task DeleteAsync(
IdentityLinkUserInfo linkUserInfo,
CancellationToken cancellationToken = default);
}
Task DeleteAsync(
IdentityLinkUserInfo linkUserInfo,
CancellationToken cancellationToken = default);
}

59
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityRoleRepository.cs

@ -4,37 +4,36 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityRoleRepository : IBasicRepository<IdentityRole, Guid>
{
public interface IIdentityRoleRepository : IBasicRepository<IdentityRole, Guid>
{
Task<IdentityRole> FindByNormalizedNameAsync(
string normalizedRoleName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<IdentityRole> FindByNormalizedNameAsync(
string normalizedRoleName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetListAsync(
IEnumerable<Guid> ids,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetListAsync(
IEnumerable<Guid> ids,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetDefaultOnesAsync(
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetDefaultOnesAsync(
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<long> GetCountAsync(
string filter = null,
CancellationToken cancellationToken = default
);
}
}
Task<long> GetCountAsync(
string filter = null,
CancellationToken cancellationToken = default
);
}

69
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentitySecurityLogRepository.cs

@ -4,42 +4,41 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentitySecurityLogRepository : IBasicRepository<IdentitySecurityLog, Guid>
{
public interface IIdentitySecurityLogRepository : IBasicRepository<IdentitySecurityLog, Guid>
{
Task<List<IdentitySecurityLog>> GetListAsync(
string sorting = null,
int maxResultCount = 50,
int skipCount = 0,
DateTime? startTime = null,
DateTime? endTime = null,
string applicationName = null,
string identity = null,
string action = null,
Guid? userId = null,
string userName = null,
string clientId = null,
string correlationId = null,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<List<IdentitySecurityLog>> GetListAsync(
string sorting = null,
int maxResultCount = 50,
int skipCount = 0,
DateTime? startTime = null,
DateTime? endTime = null,
string applicationName = null,
string identity = null,
string action = null,
Guid? userId = null,
string userName = null,
string clientId = null,
string correlationId = null,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<long> GetCountAsync(
DateTime? startTime = null,
DateTime? endTime = null,
string applicationName = null,
string identity = null,
string action = null,
Guid? userId = null,
string userName = null,
string clientId = null,
string correlationId = null,
CancellationToken cancellationToken = default);
Task<long> GetCountAsync(
DateTime? startTime = null,
DateTime? endTime = null,
string applicationName = null,
string identity = null,
string action = null,
Guid? userId = null,
string userName = null,
string clientId = null,
string correlationId = null,
CancellationToken cancellationToken = default);
Task<IdentitySecurityLog> GetByUserIdAsync(
Guid id,
Guid userId,
bool includeDetails = false,
CancellationToken cancellationToken = default);
}
Task<IdentitySecurityLog> GetByUserIdAsync(
Guid id,
Guid userId,
bool includeDetails = false,
CancellationToken cancellationToken = default);
}

167
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IIdentityUserRepository.cs

@ -6,101 +6,100 @@ using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IIdentityUserRepository : IBasicRepository<IdentityUser, Guid>
{
public interface IIdentityUserRepository : IBasicRepository<IdentityUser, Guid>
{
Task<IdentityUser> FindByNormalizedUserNameAsync(
[NotNull] string normalizedUserName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<IdentityUser> FindByNormalizedUserNameAsync(
[NotNull] string normalizedUserName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<List<string>> GetRoleNamesAsync(
Guid id,
CancellationToken cancellationToken = default
);
Task<List<string>> GetRoleNamesAsync(
Guid id,
CancellationToken cancellationToken = default
);
Task<List<string>> GetRoleNamesInOrganizationUnitAsync(
Guid id,
CancellationToken cancellationToken = default);
Task<List<string>> GetRoleNamesInOrganizationUnitAsync(
Guid id,
CancellationToken cancellationToken = default);
Task<IdentityUser> FindByLoginAsync(
[NotNull] string loginProvider,
[NotNull] string providerKey,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<IdentityUser> FindByLoginAsync(
[NotNull] string loginProvider,
[NotNull] string providerKey,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<IdentityUser> FindByNormalizedEmailAsync(
[NotNull] string normalizedEmail,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<IdentityUser> FindByNormalizedEmailAsync(
[NotNull] string normalizedEmail,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListByClaimAsync(
Claim claim,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListByClaimAsync(
Claim claim,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListByNormalizedRoleNameAsync(
string normalizedRoleName,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListByNormalizedRoleNameAsync(
string normalizedRoleName,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
Guid? roleId = null,
Guid? organizationUnitId = null,
string userName = null,
string phoneNumber = null,
string emailAddress = null,
bool? isLockedOut = null,
bool? notActive = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetRolesAsync(
Guid id,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
Guid? roleId = null,
Guid? organizationUnitId = null,
string userName = null,
string phoneNumber = null,
string emailAddress = null,
bool? isLockedOut = null,
bool? notActive = null,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetOrganizationUnitsAsync(
Guid id,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<List<IdentityRole>> GetRolesAsync(
Guid id,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUsersInOrganizationUnitAsync(
Guid organizationUnitId,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUsersInOrganizationsListAsync(
List<Guid> organizationUnitIds,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetOrganizationUnitsAsync(
Guid id,
bool includeDetails = false,
CancellationToken cancellationToken = default);
Task<List<IdentityUser>> GetUsersInOrganizationUnitWithChildrenAsync(
string code,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUsersInOrganizationUnitAsync(
Guid organizationUnitId,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUsersInOrganizationsListAsync(
List<Guid> organizationUnitIds,
CancellationToken cancellationToken = default
);
Task<long> GetCountAsync(
string filter = null,
Guid? roleId = null,
Guid? organizationUnitId = null,
string userName = null,
string phoneNumber = null,
string emailAddress = null,
bool? isLockedOut = null,
bool? notActive = null,
CancellationToken cancellationToken = default
Task<List<IdentityUser>> GetUsersInOrganizationUnitWithChildrenAsync(
string code,
CancellationToken cancellationToken = default
);
}
Task<long> GetCountAsync(
string filter = null,
Guid? roleId = null,
Guid? organizationUnitId = null,
string userName = null,
string phoneNumber = null,
string emailAddress = null,
bool? isLockedOut = null,
bool? notActive = null,
CancellationToken cancellationToken = default
);
}

215
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IOrganizationUnitRepository.cs

@ -4,113 +4,112 @@ using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public interface IOrganizationUnitRepository : IBasicRepository<OrganizationUnit, Guid>
{
public interface IOrganizationUnitRepository : IBasicRepository<OrganizationUnit, Guid>
{
Task<List<OrganizationUnit>> GetChildrenAsync(
Guid? parentId,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetAllChildrenWithParentCodeAsync(
string code,
Guid? parentId,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<OrganizationUnit> GetAsync(
string displayName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetListAsync(
IEnumerable<Guid> ids,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetRolesAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetUnaddedRolesAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetUnaddedRolesCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetMembersAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUnaddedUsersAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetUnaddedUsersCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task RemoveAllMembersAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
}
Task<List<OrganizationUnit>> GetChildrenAsync(
Guid? parentId,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetAllChildrenWithParentCodeAsync(
string code,
Guid? parentId,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<OrganizationUnit> GetAsync(
string displayName,
bool includeDetails = true,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetListAsync(
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<OrganizationUnit>> GetListAsync(
IEnumerable<Guid> ids,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetRolesAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetRolesCountAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task<List<IdentityRole>> GetUnaddedRolesAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetUnaddedRolesCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetMembersAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetMembersCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task<List<IdentityUser>> GetUnaddedUsersAsync(
OrganizationUnit organizationUnit,
string sorting = null,
int maxResultCount = int.MaxValue,
int skipCount = 0,
string filter = null,
bool includeDetails = false,
CancellationToken cancellationToken = default
);
Task<int> GetUnaddedUsersCountAsync(
OrganizationUnit organizationUnit,
string filter = null,
CancellationToken cancellationToken = default
);
Task RemoveAllRolesAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
Task RemoveAllMembersAsync(
OrganizationUnit organizationUnit,
CancellationToken cancellationToken = default
);
}

101
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaim.cs

@ -4,58 +4,57 @@ using JetBrains.Annotations;
using Volo.Abp.Domain.Entities;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public abstract class IdentityClaim : Entity<Guid>, IMultiTenant
{
public abstract class IdentityClaim : Entity<Guid>, IMultiTenant
public virtual Guid? TenantId { get; protected set; }
/// <summary>
/// Gets or sets the claim type for this claim.
/// </summary>
public virtual string ClaimType { get; protected set; }
/// <summary>
/// Gets or sets the claim value for this claim.
/// </summary>
public virtual string ClaimValue { get; protected set; }
protected IdentityClaim()
{
}
protected internal IdentityClaim(Guid id, [NotNull] Claim claim, Guid? tenantId)
: this(id, claim.Type, claim.Value, tenantId)
{
}
protected internal IdentityClaim(Guid id, [NotNull] string claimType, string claimValue, Guid? tenantId)
{
Check.NotNull(claimType, nameof(claimType));
Id = id;
ClaimType = claimType;
ClaimValue = claimValue;
TenantId = tenantId;
}
/// <summary>
/// Creates a Claim instance from this entity.
/// </summary>
/// <returns></returns>
public virtual Claim ToClaim()
{
public virtual Guid? TenantId { get; protected set; }
/// <summary>
/// Gets or sets the claim type for this claim.
/// </summary>
public virtual string ClaimType { get; protected set; }
/// <summary>
/// Gets or sets the claim value for this claim.
/// </summary>
public virtual string ClaimValue { get; protected set; }
protected IdentityClaim()
{
}
protected internal IdentityClaim(Guid id, [NotNull] Claim claim, Guid? tenantId)
: this(id, claim.Type, claim.Value, tenantId)
{
}
protected internal IdentityClaim(Guid id, [NotNull] string claimType, string claimValue, Guid? tenantId)
{
Check.NotNull(claimType, nameof(claimType));
Id = id;
ClaimType = claimType;
ClaimValue = claimValue;
TenantId = tenantId;
}
/// <summary>
/// Creates a Claim instance from this entity.
/// </summary>
/// <returns></returns>
public virtual Claim ToClaim()
{
return new Claim(ClaimType, ClaimValue);
}
public virtual void SetClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
ClaimType = claim.Type;
ClaimValue = claim.Value;
}
return new Claim(ClaimType, ClaimValue);
}
public virtual void SetClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
ClaimType = claim.Type;
ClaimValue = claim.Value;
}
}

71
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimType.cs

@ -2,52 +2,51 @@
using System;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityClaimType : AggregateRoot<Guid>
{
public class IdentityClaimType : AggregateRoot<Guid>
{
public virtual string Name { get; protected set; }
public virtual string Name { get; protected set; }
public virtual bool Required { get; set; }
public virtual bool Required { get; set; }
public virtual bool IsStatic { get; protected set; }
public virtual bool IsStatic { get; protected set; }
public virtual string Regex { get; set; }
public virtual string Regex { get; set; }
public virtual string RegexDescription { get; set; }
public virtual string RegexDescription { get; set; }
public virtual string Description { get; set; }
public virtual string Description { get; set; }
public virtual IdentityClaimValueType ValueType { get; set; }
public virtual IdentityClaimValueType ValueType { get; set; }
protected IdentityClaimType()
{
protected IdentityClaimType()
{
}
}
public IdentityClaimType(
Guid id,
[NotNull] string name,
bool required = false,
bool isStatic = false,
[CanBeNull] string regex = null,
[CanBeNull] string regexDescription = null,
[CanBeNull] string description = null,
IdentityClaimValueType valueType = IdentityClaimValueType.String)
{
Id = id;
SetName(name);
Required = required;
IsStatic = isStatic;
Regex = regex;
RegexDescription = regexDescription;
Description = description;
ValueType = valueType;
}
public IdentityClaimType(
Guid id,
[NotNull] string name,
bool required = false,
bool isStatic = false,
[CanBeNull] string regex = null,
[CanBeNull] string regexDescription = null,
[CanBeNull] string description = null,
IdentityClaimValueType valueType = IdentityClaimValueType.String)
{
Id = id;
SetName(name);
Required = required;
IsStatic = isStatic;
Regex = regex;
RegexDescription = regexDescription;
Description = description;
ValueType = valueType;
}
public void SetName([NotNull] string name)
{
Name = Check.NotNull(name, nameof(name));
}
public void SetName([NotNull] string name)
{
Name = Check.NotNull(name, nameof(name));
}
}

49
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityClaimTypeManager.cs

@ -1,41 +1,40 @@
using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityClaimTypeManager : DomainService
{
public class IdentityClaimTypeManager : DomainService
protected IIdentityClaimTypeRepository IdentityClaimTypeRepository { get; }
public IdentityClaimTypeManager(IIdentityClaimTypeRepository identityClaimTypeRepository)
{
protected IIdentityClaimTypeRepository IdentityClaimTypeRepository { get; }
IdentityClaimTypeRepository = identityClaimTypeRepository;
}
public IdentityClaimTypeManager(IIdentityClaimTypeRepository identityClaimTypeRepository)
public virtual async Task<IdentityClaimType> CreateAsync(IdentityClaimType claimType)
{
if (await IdentityClaimTypeRepository.AnyAsync(claimType.Name))
{
IdentityClaimTypeRepository = identityClaimTypeRepository;
throw new AbpException($"Name Exist: {claimType.Name}");
}
public virtual async Task<IdentityClaimType> CreateAsync(IdentityClaimType claimType)
{
if (await IdentityClaimTypeRepository.AnyAsync(claimType.Name))
{
throw new AbpException($"Name Exist: {claimType.Name}");
}
return await IdentityClaimTypeRepository.InsertAsync(claimType);
}
return await IdentityClaimTypeRepository.InsertAsync(claimType);
public virtual async Task<IdentityClaimType> UpdateAsync(IdentityClaimType claimType)
{
if (await IdentityClaimTypeRepository.AnyAsync(claimType.Name, claimType.Id))
{
throw new AbpException($"Name Exist: {claimType.Name}");
}
public virtual async Task<IdentityClaimType> UpdateAsync(IdentityClaimType claimType)
if (claimType.IsStatic)
{
if (await IdentityClaimTypeRepository.AnyAsync(claimType.Name, claimType.Id))
{
throw new AbpException($"Name Exist: {claimType.Name}");
}
if (claimType.IsStatic)
{
throw new AbpException($"Can not update a static ClaimType.");
}
return await IdentityClaimTypeRepository.UpdateAsync(claimType);
throw new AbpException($"Can not update a static ClaimType.");
}
return await IdentityClaimTypeRepository.UpdateAsync(claimType);
}
}

39
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeedContributor.cs

@ -2,29 +2,28 @@
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityDataSeedContributor : IDataSeedContributor, ITransientDependency
{
public class IdentityDataSeedContributor : IDataSeedContributor, ITransientDependency
{
public const string AdminEmailPropertyName = "AdminEmail";
public const string AdminEmailDefaultValue = "admin@abp.io";
public const string AdminPasswordPropertyName = "AdminPassword";
public const string AdminPasswordDefaultValue = "1q2w3E*";
public const string AdminEmailPropertyName = "AdminEmail";
public const string AdminEmailDefaultValue = "admin@abp.io";
public const string AdminPasswordPropertyName = "AdminPassword";
public const string AdminPasswordDefaultValue = "1q2w3E*";
protected IIdentityDataSeeder IdentityDataSeeder { get; }
protected IIdentityDataSeeder IdentityDataSeeder { get; }
public IdentityDataSeedContributor(IIdentityDataSeeder identityDataSeeder)
{
IdentityDataSeeder = identityDataSeeder;
}
public IdentityDataSeedContributor(IIdentityDataSeeder identityDataSeeder)
{
IdentityDataSeeder = identityDataSeeder;
}
public virtual Task SeedAsync(DataSeedContext context)
{
return IdentityDataSeeder.SeedAsync(
context?[AdminEmailPropertyName] as string ?? AdminEmailDefaultValue,
context?[AdminPasswordPropertyName] as string ?? AdminPasswordDefaultValue,
context?.TenantId
);
}
public virtual Task SeedAsync(DataSeedContext context)
{
return IdentityDataSeeder.SeedAsync(
context?[AdminEmailPropertyName] as string ?? AdminEmailDefaultValue,
context?[AdminPasswordPropertyName] as string ?? AdminPasswordDefaultValue,
context?.TenantId
);
}
}

13
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeedResult.cs

@ -1,9 +1,8 @@
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityDataSeedResult
{
public class IdentityDataSeedResult
{
public bool CreatedAdminUser { get; set; }
public bool CreatedAdminUser { get; set; }
public bool CreatedAdminRole { get; set; }
}
}
public bool CreatedAdminRole { get; set; }
}

153
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDataSeeder.cs

@ -7,101 +7,100 @@ using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Uow;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityDataSeeder : ITransientDependency, IIdentityDataSeeder
{
public class IdentityDataSeeder : ITransientDependency, IIdentityDataSeeder
protected IGuidGenerator GuidGenerator { get; }
protected IIdentityRoleRepository RoleRepository { get; }
protected IIdentityUserRepository UserRepository { get; }
protected ILookupNormalizer LookupNormalizer { get; }
protected IdentityUserManager UserManager { get; }
protected IdentityRoleManager RoleManager { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
public IdentityDataSeeder(
IGuidGenerator guidGenerator,
IIdentityRoleRepository roleRepository,
IIdentityUserRepository userRepository,
ILookupNormalizer lookupNormalizer,
IdentityUserManager userManager,
IdentityRoleManager roleManager,
ICurrentTenant currentTenant,
IOptions<IdentityOptions> identityOptions)
{
protected IGuidGenerator GuidGenerator { get; }
protected IIdentityRoleRepository RoleRepository { get; }
protected IIdentityUserRepository UserRepository { get; }
protected ILookupNormalizer LookupNormalizer { get; }
protected IdentityUserManager UserManager { get; }
protected IdentityRoleManager RoleManager { get; }
protected ICurrentTenant CurrentTenant { get; }
protected IOptions<IdentityOptions> IdentityOptions { get; }
GuidGenerator = guidGenerator;
RoleRepository = roleRepository;
UserRepository = userRepository;
LookupNormalizer = lookupNormalizer;
UserManager = userManager;
RoleManager = roleManager;
CurrentTenant = currentTenant;
IdentityOptions = identityOptions;
}
public IdentityDataSeeder(
IGuidGenerator guidGenerator,
IIdentityRoleRepository roleRepository,
IIdentityUserRepository userRepository,
ILookupNormalizer lookupNormalizer,
IdentityUserManager userManager,
IdentityRoleManager roleManager,
ICurrentTenant currentTenant,
IOptions<IdentityOptions> identityOptions)
{
GuidGenerator = guidGenerator;
RoleRepository = roleRepository;
UserRepository = userRepository;
LookupNormalizer = lookupNormalizer;
UserManager = userManager;
RoleManager = roleManager;
CurrentTenant = currentTenant;
IdentityOptions = identityOptions;
}
[UnitOfWork]
public virtual async Task<IdentityDataSeedResult> SeedAsync(
string adminEmail,
string adminPassword,
Guid? tenantId = null)
{
Check.NotNullOrWhiteSpace(adminEmail, nameof(adminEmail));
Check.NotNullOrWhiteSpace(adminPassword, nameof(adminPassword));
[UnitOfWork]
public virtual async Task<IdentityDataSeedResult> SeedAsync(
string adminEmail,
string adminPassword,
Guid? tenantId = null)
using (CurrentTenant.Change(tenantId))
{
Check.NotNullOrWhiteSpace(adminEmail, nameof(adminEmail));
Check.NotNullOrWhiteSpace(adminPassword, nameof(adminPassword));
await IdentityOptions.SetAsync();
var result = new IdentityDataSeedResult();
//"admin" user
const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
using (CurrentTenant.Change(tenantId))
if (adminUser != null)
{
await IdentityOptions.SetAsync();
return result;
}
var result = new IdentityDataSeedResult();
//"admin" user
const string adminUserName = "admin";
var adminUser = await UserRepository.FindByNormalizedUserNameAsync(
LookupNormalizer.NormalizeName(adminUserName)
);
adminUser = new IdentityUser(
GuidGenerator.Create(),
adminUserName,
adminEmail,
tenantId
)
{
Name = adminUserName
};
if (adminUser != null)
{
return result;
}
(await UserManager.CreateAsync(adminUser, adminPassword, validatePassword: false)).CheckErrors();
result.CreatedAdminUser = true;
adminUser = new IdentityUser(
//"admin" role
const string adminRoleName = "admin";
var adminRole =
await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
GuidGenerator.Create(),
adminUserName,
adminEmail,
adminRoleName,
tenantId
)
{
Name = adminUserName
IsStatic = true,
IsPublic = true
};
(await UserManager.CreateAsync(adminUser, adminPassword, validatePassword: false)).CheckErrors();
result.CreatedAdminUser = true;
//"admin" role
const string adminRoleName = "admin";
var adminRole =
await RoleRepository.FindByNormalizedNameAsync(LookupNormalizer.NormalizeName(adminRoleName));
if (adminRole == null)
{
adminRole = new IdentityRole(
GuidGenerator.Create(),
adminRoleName,
tenantId
)
{
IsStatic = true,
IsPublic = true
};
(await RoleManager.CreateAsync(adminRole)).CheckErrors();
result.CreatedAdminRole = true;
}
(await RoleManager.CreateAsync(adminRole)).CheckErrors();
result.CreatedAdminRole = true;
}
(await UserManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors();
(await UserManager.AddToRoleAsync(adminUser, adminRoleName)).CheckErrors();
return result;
}
return result;
}
}
}

19
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityDomainMappingProfile.cs

@ -1,16 +1,15 @@
using AutoMapper;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityDomainMappingProfile : Profile
{
public class IdentityDomainMappingProfile : Profile
public IdentityDomainMappingProfile()
{
public IdentityDomainMappingProfile()
{
CreateMap<IdentityUser, UserEto>();
CreateMap<IdentityClaimType, IdentityClaimTypeEto>();
CreateMap<IdentityRole, IdentityRoleEto>();
CreateMap<OrganizationUnit, OrganizationUnitEto>();
}
CreateMap<IdentityUser, UserEto>();
CreateMap<IdentityClaimType, IdentityClaimTypeEto>();
CreateMap<IdentityRole, IdentityRoleEto>();
CreateMap<OrganizationUnit, OrganizationUnitEto>();
}
}
}

57
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUser.cs

@ -1,44 +1,43 @@
using System;
using Volo.Abp.Domain.Entities;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityLinkUser : BasicAggregateRoot<Guid>
{
public class IdentityLinkUser : BasicAggregateRoot<Guid>
{
public virtual Guid SourceUserId { get; protected set; }
public virtual Guid SourceUserId { get; protected set; }
public virtual Guid? SourceTenantId { get; protected set; }
public virtual Guid? SourceTenantId { get; protected set; }
public virtual Guid TargetUserId { get; protected set; }
public virtual Guid TargetUserId { get; protected set; }
public virtual Guid? TargetTenantId { get; protected set; }
public virtual Guid? TargetTenantId { get; protected set; }
/// <summary>
/// Initializes a new instance of <see cref="IdentityLinkUser"/>.
/// </summary>
protected IdentityLinkUser()
{
/// <summary>
/// Initializes a new instance of <see cref="IdentityLinkUser"/>.
/// </summary>
protected IdentityLinkUser()
{
}
}
public IdentityLinkUser(Guid id, IdentityLinkUserInfo sourceUser, IdentityLinkUserInfo targetUser)
: base(id)
{
SourceUserId = sourceUser.UserId;
SourceTenantId = sourceUser.TenantId;
public IdentityLinkUser(Guid id, IdentityLinkUserInfo sourceUser, IdentityLinkUserInfo targetUser)
: base(id)
{
SourceUserId = sourceUser.UserId;
SourceTenantId = sourceUser.TenantId;
TargetUserId = targetUser.UserId;
TargetTenantId = targetUser.TenantId;
}
TargetUserId = targetUser.UserId;
TargetTenantId = targetUser.TenantId;
}
public IdentityLinkUser(Guid id, Guid sourceUserId, Guid? sourceTenantId, Guid targetUserId, Guid? targetTenantId)
: base(id)
{
SourceUserId = sourceUserId;
SourceTenantId = sourceTenantId;
public IdentityLinkUser(Guid id, Guid sourceUserId, Guid? sourceTenantId, Guid targetUserId, Guid? targetTenantId)
: base(id)
{
SourceUserId = sourceUserId;
SourceTenantId = sourceTenantId;
TargetUserId = targetUserId;
TargetTenantId = targetTenantId;
}
TargetUserId = targetUserId;
TargetTenantId = targetTenantId;
}
}

19
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserInfo.cs

@ -1,17 +1,16 @@
using System;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityLinkUserInfo
{
public class IdentityLinkUserInfo
{
public virtual Guid UserId { get; set; }
public virtual Guid UserId { get; set; }
public virtual Guid? TenantId { get; set; }
public virtual Guid? TenantId { get; set; }
public IdentityLinkUserInfo(Guid userId, Guid? tenantId)
{
UserId = userId;
TenantId = tenantId;
}
public IdentityLinkUserInfo(Guid userId, Guid? tenantId)
{
UserId = userId;
TenantId = tenantId;
}
}

193
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityLinkUserManager.cs

@ -6,147 +6,146 @@ using System.Threading.Tasks;
using Volo.Abp.Domain.Services;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
public class IdentityLinkUserManager : DomainService
{
public class IdentityLinkUserManager : DomainService
{
protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; }
protected IIdentityLinkUserRepository IdentityLinkUserRepository { get; }
protected IdentityUserManager UserManager { get; }
protected IdentityUserManager UserManager { get; }
protected new ICurrentTenant CurrentTenant { get; }
protected new ICurrentTenant CurrentTenant { get; }
public IdentityLinkUserManager(IIdentityLinkUserRepository identityLinkUserRepository, IdentityUserManager userManager, ICurrentTenant currentTenant)
{
IdentityLinkUserRepository = identityLinkUserRepository;
UserManager = userManager;
CurrentTenant = currentTenant;
}
public IdentityLinkUserManager(IIdentityLinkUserRepository identityLinkUserRepository, IdentityUserManager userManager, ICurrentTenant currentTenant)
{
IdentityLinkUserRepository = identityLinkUserRepository;
UserManager = userManager;
CurrentTenant = currentTenant;
}
public async Task<List<IdentityLinkUser>> GetListAsync(IdentityLinkUserInfo linkUserInfo, bool includeIndirect = false, CancellationToken cancellationToken = default)
public async Task<List<IdentityLinkUser>> GetListAsync(IdentityLinkUserInfo linkUserInfo, bool includeIndirect = false, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(null))
{
using (CurrentTenant.Change(null))
var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken: cancellationToken);
if (includeIndirect == false)
{
var users = await IdentityLinkUserRepository.GetListAsync(linkUserInfo, cancellationToken: cancellationToken);
if (includeIndirect == false)
{
return users;
}
return users;
}
var userInfos = new List<IdentityLinkUserInfo>()
var userInfos = new List<IdentityLinkUserInfo>()
{
linkUserInfo
};
var allUsers = new List<IdentityLinkUser>();
allUsers.AddRange(users);
var allUsers = new List<IdentityLinkUser>();
allUsers.AddRange(users);
do
do
{
var nextUsers = new List<IdentityLinkUserInfo>();
foreach (var user in users)
{
var nextUsers = new List<IdentityLinkUserInfo>();
foreach (var user in users)
if (userInfos.Any(x => x.TenantId != user.SourceTenantId || x.UserId != user.SourceUserId))
{
if (userInfos.Any(x => x.TenantId != user.SourceTenantId || x.UserId != user.SourceUserId))
{
nextUsers.Add(new IdentityLinkUserInfo(user.SourceUserId, user.SourceTenantId));
}
if (userInfos.Any(x => x.TenantId != user.TargetTenantId || x.UserId != user.TargetUserId))
{
nextUsers.Add(new IdentityLinkUserInfo(user.TargetUserId, user.TargetTenantId));
}
nextUsers.Add(new IdentityLinkUserInfo(user.SourceUserId, user.SourceTenantId));
}
users = new List<IdentityLinkUser>();
foreach (var next in nextUsers)
if (userInfos.Any(x => x.TenantId != user.TargetTenantId || x.UserId != user.TargetUserId))
{
users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken));
nextUsers.Add(new IdentityLinkUserInfo(user.TargetUserId, user.TargetTenantId));
}
}
users = new List<IdentityLinkUser>();
foreach (var next in nextUsers)
{
users.AddRange(await IdentityLinkUserRepository.GetListAsync(next, userInfos, cancellationToken));
}
userInfos.AddRange(nextUsers);
allUsers.AddRange(users);
} while (users.Any());
userInfos.AddRange(nextUsers);
allUsers.AddRange(users);
} while (users.Any());
return allUsers;
}
return allUsers;
}
}
public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
public virtual async Task LinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(null))
{
using (CurrentTenant.Change(null))
if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
{
if (sourceLinkUser.UserId == targetLinkUser.UserId && sourceLinkUser.TenantId == targetLinkUser.TenantId)
{
return;
}
if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
return;
}
var userLink = new IdentityLinkUser(
GuidGenerator.Create(),
sourceLinkUser,
targetLinkUser);
await IdentityLinkUserRepository.InsertAsync(userLink, true, cancellationToken);
if (await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
var userLink = new IdentityLinkUser(
GuidGenerator.Create(),
sourceLinkUser,
targetLinkUser);
await IdentityLinkUserRepository.InsertAsync(userLink, true, cancellationToken);
}
}
public virtual async Task<bool> IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, bool includeIndirect = false, CancellationToken cancellationToken = default)
public virtual async Task<bool> IsLinkedAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, bool includeIndirect = false, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(null))
{
using (CurrentTenant.Change(null))
if (includeIndirect)
{
if (includeIndirect)
{
return (await GetListAsync(sourceLinkUser, true, cancellationToken: cancellationToken))
.Any(x => x.SourceTenantId == targetLinkUser.TenantId && x.SourceUserId == targetLinkUser.UserId ||
x.TargetTenantId == targetLinkUser.TenantId && x.TargetUserId == targetLinkUser.UserId);
}
return await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken) != null;
return (await GetListAsync(sourceLinkUser, true, cancellationToken: cancellationToken))
.Any(x => x.SourceTenantId == targetLinkUser.TenantId && x.SourceUserId == targetLinkUser.UserId ||
x.TargetTenantId == targetLinkUser.TenantId && x.TargetUserId == targetLinkUser.UserId);
}
return await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken) != null;
}
}
public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
public virtual async Task UnlinkAsync(IdentityLinkUserInfo sourceLinkUser, IdentityLinkUserInfo targetLinkUser, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(null))
{
using (CurrentTenant.Change(null))
if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
if (!await IsLinkedAsync(sourceLinkUser, targetLinkUser, cancellationToken: cancellationToken))
{
return;
}
return;
}
var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken);
if (linkedUser != null)
{
await IdentityLinkUserRepository.DeleteAsync(linkedUser, cancellationToken: cancellationToken);
}
var linkedUser = await IdentityLinkUserRepository.FindAsync(sourceLinkUser, targetLinkUser, cancellationToken);
if (linkedUser != null)
{
await IdentityLinkUserRepository.DeleteAsync(linkedUser, cancellationToken: cancellationToken);
}
}
}
public virtual async Task<string> GenerateLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string tokenPurpose, CancellationToken cancellationToken = default)
public virtual async Task<string> GenerateLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string tokenPurpose, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(targetLinkUser.TenantId))
{
using (CurrentTenant.Change(targetLinkUser.TenantId))
{
var user = await UserManager.GetByIdAsync(targetLinkUser.UserId);
return await UserManager.GenerateUserTokenAsync(
user,
LinkUserTokenProviderConsts.LinkUserTokenProviderName,
tokenPurpose);
}
var user = await UserManager.GetByIdAsync(targetLinkUser.UserId);
return await UserManager.GenerateUserTokenAsync(
user,
LinkUserTokenProviderConsts.LinkUserTokenProviderName,
tokenPurpose);
}
}
public virtual async Task<bool> VerifyLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string token, string tokenPurpose, CancellationToken cancellationToken = default)
public virtual async Task<bool> VerifyLinkTokenAsync(IdentityLinkUserInfo targetLinkUser, string token, string tokenPurpose, CancellationToken cancellationToken = default)
{
using (CurrentTenant.Change(targetLinkUser.TenantId))
{
using (CurrentTenant.Change(targetLinkUser.TenantId))
{
var user = await UserManager.GetByIdAsync(targetLinkUser.UserId);
return await UserManager.VerifyUserTokenAsync(
user,
LinkUserTokenProviderConsts.LinkUserTokenProviderName,
tokenPurpose,
token);
}
var user = await UserManager.GetByIdAsync(targetLinkUser.UserId);
return await UserManager.VerifyUserTokenAsync(
user,
LinkUserTokenProviderConsts.LinkUserTokenProviderName,
tokenPurpose,
token);
}
}
}

191
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRole.cs

@ -9,105 +9,105 @@ using Volo.Abp.Domain.Entities;
using Volo.Abp.Guids;
using Volo.Abp.MultiTenancy;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
/// <summary>
/// Represents a role in the identity system
/// </summary>
public class IdentityRole : AggregateRoot<Guid>, IMultiTenant
{
public virtual Guid? TenantId { get; protected set; }
/// <summary>
/// Gets or sets the name for this role.
/// </summary>
public virtual string Name { get; protected internal set; }
/// <summary>
/// Gets or sets the normalized name for this role.
/// </summary>
[DisableAuditing]
public virtual string NormalizedName { get; protected internal set; }
/// <summary>
/// Navigation property for claims in this role.
/// </summary>
public virtual ICollection<IdentityRoleClaim> Claims { get; protected set; }
/// <summary>
/// A default role is automatically assigned to a new user
/// </summary>
public virtual bool IsDefault { get; set; }
/// <summary>
/// Represents a role in the identity system
/// A static role can not be deleted/renamed
/// </summary>
public class IdentityRole : AggregateRoot<Guid>, IMultiTenant
public virtual bool IsStatic { get; set; }
/// <summary>
/// A user can see other user's public roles
/// </summary>
public virtual bool IsPublic { get; set; }
/// <summary>
/// Initializes a new instance of <see cref="IdentityRole"/>.
/// </summary>
protected IdentityRole() { }
public IdentityRole(Guid id, [NotNull] string name, Guid? tenantId = null)
{
public virtual Guid? TenantId { get; protected set; }
/// <summary>
/// Gets or sets the name for this role.
/// </summary>
public virtual string Name { get; protected internal set; }
/// <summary>
/// Gets or sets the normalized name for this role.
/// </summary>
[DisableAuditing]
public virtual string NormalizedName { get; protected internal set; }
/// <summary>
/// Navigation property for claims in this role.
/// </summary>
public virtual ICollection<IdentityRoleClaim> Claims { get; protected set; }
/// <summary>
/// A default role is automatically assigned to a new user
/// </summary>
public virtual bool IsDefault { get; set; }
/// <summary>
/// A static role can not be deleted/renamed
/// </summary>
public virtual bool IsStatic { get; set; }
/// <summary>
/// A user can see other user's public roles
/// </summary>
public virtual bool IsPublic { get; set; }
/// <summary>
/// Initializes a new instance of <see cref="IdentityRole"/>.
/// </summary>
protected IdentityRole() { }
public IdentityRole(Guid id, [NotNull] string name, Guid? tenantId = null)
{
Check.NotNull(name, nameof(name));
Check.NotNull(name, nameof(name));
Id = id;
Name = name;
TenantId = tenantId;
NormalizedName = name.ToUpperInvariant();
ConcurrencyStamp = Guid.NewGuid().ToString();
Id = id;
Name = name;
TenantId = tenantId;
NormalizedName = name.ToUpperInvariant();
ConcurrencyStamp = Guid.NewGuid().ToString();
Claims = new Collection<IdentityRoleClaim>();
}
Claims = new Collection<IdentityRoleClaim>();
}
public virtual void AddClaim([NotNull] IGuidGenerator guidGenerator, [NotNull] Claim claim)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claim, nameof(claim));
public virtual void AddClaim([NotNull] IGuidGenerator guidGenerator, [NotNull] Claim claim)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claim, nameof(claim));
Claims.Add(new IdentityRoleClaim(guidGenerator.Create(), Id, claim, TenantId));
}
Claims.Add(new IdentityRoleClaim(guidGenerator.Create(), Id, claim, TenantId));
}
public virtual void AddClaims([NotNull] IGuidGenerator guidGenerator, [NotNull] IEnumerable<Claim> claims)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claims, nameof(claims));
public virtual void AddClaims([NotNull] IGuidGenerator guidGenerator, [NotNull] IEnumerable<Claim> claims)
{
Check.NotNull(guidGenerator, nameof(guidGenerator));
Check.NotNull(claims, nameof(claims));
foreach (var claim in claims)
{
AddClaim(guidGenerator, claim);
}
foreach (var claim in claims)
{
AddClaim(guidGenerator, claim);
}
}
public virtual IdentityRoleClaim FindClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
public virtual IdentityRoleClaim FindClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
return Claims.FirstOrDefault(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value);
}
return Claims.FirstOrDefault(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value);
}
public virtual void RemoveClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
public virtual void RemoveClaim([NotNull] Claim claim)
{
Check.NotNull(claim, nameof(claim));
Claims.RemoveAll(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value);
}
Claims.RemoveAll(c => c.ClaimType == claim.Type && c.ClaimValue == claim.Value);
}
public virtual void ChangeName(string name)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
public virtual void ChangeName(string name)
{
Check.NotNullOrWhiteSpace(name, nameof(name));
var oldName = Name;
Name = name;
var oldName = Name;
Name = name;
AddLocalEvent(
AddLocalEvent(
#pragma warning disable 618
new IdentityRoleNameChangedEvent
#pragma warning restore 618
@ -115,22 +115,21 @@ namespace Volo.Abp.Identity
IdentityRole = this,
OldName = oldName
}
);
);
AddDistributedEvent(
new IdentityRoleNameChangedEto
{
Id = Id,
Name = Name,
OldName = oldName,
TenantId = TenantId
}
);
}
AddDistributedEvent(
new IdentityRoleNameChangedEto
{
Id = Id,
Name = Name,
OldName = oldName,
TenantId = TenantId
}
);
}
public override string ToString()
{
return $"{base.ToString()}, Name = {Name}";
}
public override string ToString()
{
return $"{base.ToString()}, Name = {Name}";
}
}

75
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityRoleClaim.cs

@ -2,49 +2,48 @@ using System;
using System.Security.Claims;
using JetBrains.Annotations;
namespace Volo.Abp.Identity
namespace Volo.Abp.Identity;
/// <summary>
/// Represents a claim that is granted to all users within a role.
/// </summary>
public class IdentityRoleClaim : IdentityClaim
{
/// <summary>
/// Represents a claim that is granted to all users within a role.
/// Gets or sets the of the primary key of the role associated with this claim.
/// </summary>
public class IdentityRoleClaim : IdentityClaim
{
/// <summary>
/// Gets or sets the of the primary key of the role associated with this claim.
/// </summary>
public virtual Guid RoleId { get; protected set; }
public virtual Guid RoleId { get; protected set; }
protected IdentityRoleClaim()
{
protected IdentityRoleClaim()
{
}
}
protected internal IdentityRoleClaim(
Guid id,
Guid roleId,
[NotNull] Claim claim,
Guid? tenantId)
: base(
id,
claim,
tenantId)
{
RoleId = roleId;
}
protected internal IdentityRoleClaim(
Guid id,
Guid roleId,
[NotNull] Claim claim,
Guid? tenantId)
: base(
id,
claim,
tenantId)
{
RoleId = roleId;
}
public IdentityRoleClaim(
Guid id,
Guid roleId,
[NotNull] string claimType,
string claimValue,
Guid? tenantId)
: base(
id,
claimType,
claimValue,
tenantId)
{
RoleId = roleId;
}
public IdentityRoleClaim(
Guid id,
Guid roleId,
[NotNull] string claimType,
string claimValue,
Guid? tenantId)
: base(
id,
claimType,
claimValue,
tenantId)
{
RoleId = roleId;
}
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save