Browse Source

Merge branch 'dev' into api-definition

pull/3192/head
Alper Ebicoglu 7 years ago
parent
commit
c886575748
  1. 66
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs
  2. 2
      framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs
  3. 13
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs
  4. 12
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs
  5. 10
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml.cs
  6. 16
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs
  7. 20
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs
  8. 11
      modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml.cs
  9. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs
  10. 4
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs
  11. 8
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs
  12. 58
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs
  13. 12
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs
  14. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs
  15. 12
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs
  16. 40
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs
  17. 32
      modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs
  18. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs
  19. 4
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs
  20. 6
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs
  21. 10
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs
  22. 4
      modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs
  23. 2
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs
  24. 4
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs
  25. 6
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs
  26. 6
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs
  27. 10
      modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs
  28. 21
      modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs
  29. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs
  30. 8
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs
  31. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs
  32. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs
  33. 12
      modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs
  34. 4
      modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs
  35. 12
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs
  36. 2
      modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Utils/FlatTreeDepthFinder.cs
  37. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs
  38. 6
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs
  39. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs
  40. 8
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs
  41. 2
      modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingStore.cs
  42. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs
  43. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs
  44. 4
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs
  45. 21
      modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs
  46. 2
      modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs
  47. 10
      modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs
  48. 44
      modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs
  49. 6
      modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs
  50. 28
      modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs
  51. 6
      modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs
  52. 2
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs
  53. 2
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs
  54. 14
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs
  55. 13
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs
  56. 12
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs
  57. 8
      modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml.cs

66
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/NuGet/NuGetService.cs

@ -11,6 +11,7 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Logging.Abstractions;
using Polly; using Polly;
using Polly.Extensions.Http; using Polly.Extensions.Http;
using Volo.Abp.Cli.Auth;
using Volo.Abp.Cli.Http; using Volo.Abp.Cli.Http;
using Volo.Abp.Cli.Licensing; using Volo.Abp.Cli.Licensing;
using Volo.Abp.Cli.ProjectBuilding; using Volo.Abp.Cli.ProjectBuilding;
@ -32,7 +33,8 @@ namespace Volo.Abp.Cli.NuGet
public NuGetService( public NuGetService(
IJsonSerializer jsonSerializer, IJsonSerializer jsonSerializer,
IRemoteServiceExceptionHandler remoteServiceExceptionHandler, IRemoteServiceExceptionHandler remoteServiceExceptionHandler,
ICancellationTokenProvider cancellationTokenProvider, IApiKeyService apiKeyService) ICancellationTokenProvider cancellationTokenProvider,
IApiKeyService apiKeyService)
{ {
JsonSerializer = jsonSerializer; JsonSerializer = jsonSerializer;
RemoteServiceExceptionHandler = remoteServiceExceptionHandler; RemoteServiceExceptionHandler = remoteServiceExceptionHandler;
@ -43,21 +45,33 @@ namespace Volo.Abp.Cli.NuGet
public async Task<SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false) public async Task<SemanticVersion> GetLatestVersionOrNullAsync(string packageId, bool includePreviews = false, bool includeNightly = false)
{ {
var url = includeNightly ? List<string> proPackageList = null;
$"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json" :
$"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json"; if (AuthService.IsLoggedIn())
{
proPackageList = await GetProPackageListAsync();
}
string url;
if (includeNightly)
{
url =
$"https://www.myget.org/F/abp-nightly/api/v3/flatcontainer/{packageId.ToLowerInvariant()}/index.json";
}
else if (proPackageList?.Contains(packageId) ?? false)
{
url = await GetNuGetUrlForCommercialPackage(packageId);
}
else
{
url = $"https://api.nuget.org/v3-flatcontainer/{packageId.ToLowerInvariant()}/index.json";
}
using (var client = new CliHttpClient(setBearerToken: false)) using (var client = new CliHttpClient(setBearerToken: false))
{ {
var responseMessage = await GetHttpResponseMessageWithRetryAsync(client, url); var responseMessage = await GetHttpResponseMessageWithRetryAsync(client, url);
if (responseMessage.StatusCode == HttpStatusCode.NotFound)
{
var commercialNuGetUrl = await GetNuGetUrlForCommercialPackage(packageId);
responseMessage = await GetHttpResponseMessageWithRetryAsync(client, commercialNuGetUrl);
}
if (!responseMessage.IsSuccessStatusCode) if (!responseMessage.IsSuccessStatusCode)
{ {
throw new Exception($"ERROR: Remote server returns '{responseMessage.StatusCode}'"); throw new Exception($"ERROR: Remote server returns '{responseMessage.StatusCode}'");
@ -95,19 +109,21 @@ namespace Volo.Abp.Cli.NuGet
.OrResult(msg => !msg.IsSuccessStatusCode) .OrResult(msg => !msg.IsSuccessStatusCode)
.WaitAndRetryAsync(new[] .WaitAndRetryAsync(new[]
{ {
TimeSpan.FromSeconds(1) TimeSpan.FromSeconds(2),
TimeSpan.FromSeconds(4),
TimeSpan.FromSeconds(7)
}, },
(responseMessage, timeSpan, retryCount, context) => (responseMessage, timeSpan, retryCount, context) =>
{ {
if (responseMessage.Exception != null) if (responseMessage.Exception != null)
{ {
Logger.LogDebug( Logger.LogWarning(
$"{retryCount}. HTTP request attempt failed to {url} with an error: HTTP {(int)responseMessage.Result.StatusCode}-{responseMessage.Exception.Message}. " + $"{retryCount}. HTTP request attempt failed to {url} with an error: HTTP {(int)responseMessage.Result.StatusCode}-{responseMessage.Exception.Message}. " +
$"Waiting {timeSpan.TotalSeconds} secs for the next try..."); $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
} }
else if (responseMessage.Result != null) else if (responseMessage.Result != null)
{ {
Logger.LogDebug( Logger.LogWarning(
$"{retryCount}. HTTP request attempt failed to {url} with an error: {(int)responseMessage.Result.StatusCode}-{responseMessage.Result.ReasonPhrase}. " + $"{retryCount}. HTTP request attempt failed to {url} with an error: {(int)responseMessage.Result.StatusCode}-{responseMessage.Result.ReasonPhrase}. " +
$"Waiting {timeSpan.TotalSeconds} secs for the next try..."); $"Waiting {timeSpan.TotalSeconds} secs for the next try...");
} }
@ -115,6 +131,30 @@ namespace Volo.Abp.Cli.NuGet
.ExecuteAsync(async () => await client.GetAsync(url, CancellationTokenProvider.Token)); .ExecuteAsync(async () => await client.GetAsync(url, CancellationTokenProvider.Token));
} }
private async Task<List<string>> GetProPackageListAsync()
{
using var client = new CliHttpClient();
var responseMessage = await client.GetAsync(
$"{CliUrls.WwwAbpIo}api/app/nugetPackage/proPackageNames",
CancellationTokenProvider.Token
);
if (!responseMessage.IsSuccessStatusCode)
{
var exceptionMessage = "Remote server returns '" + (int)responseMessage.StatusCode + "-" + responseMessage.ReasonPhrase + "'. ";
var remoteServiceErrorMessage = await RemoteServiceExceptionHandler.GetAbpRemoteServiceErrorAsync(responseMessage);
if (remoteServiceErrorMessage != null)
{
exceptionMessage += remoteServiceErrorMessage;
}
Logger.LogInformation(exceptionMessage);
return null;
}
return JsonSerializer.Deserialize<List<string>>(await responseMessage.Content.ReadAsStringAsync());
}
public class NuGetVersionResultDto public class NuGetVersionResultDto
{ {

2
framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Utils/CmdHelper.cs

@ -65,6 +65,8 @@ namespace Volo.Abp.Cli.Utils
} }
} }
process.WaitForExit();
exitCode = process.ExitCode; exitCode = process.ExitCode;
} }

13
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/CreateModal.cshtml.cs

@ -9,19 +9,24 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Roles
[BindProperty] [BindProperty]
public RoleInfoModel Role { get; set; } public RoleInfoModel Role { get; set; }
private readonly IIdentityRoleAppService _identityRoleAppService; protected IIdentityRoleAppService IdentityRoleAppService { get; }
public CreateModalModel(IIdentityRoleAppService identityRoleAppService) public CreateModalModel(IIdentityRoleAppService identityRoleAppService)
{ {
_identityRoleAppService = identityRoleAppService; IdentityRoleAppService = identityRoleAppService;
} }
public async Task<IActionResult> OnPostAsync() public virtual Task OnGetAsync()
{
return Task.CompletedTask;
}
public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<RoleInfoModel, IdentityRoleCreateDto>(Role); var input = ObjectMapper.Map<RoleInfoModel, IdentityRoleCreateDto>(Role);
await _identityRoleAppService.CreateAsync(input); await IdentityRoleAppService.CreateAsync(input);
return NoContent(); return NoContent();
} }

12
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/EditModal.cshtml.cs

@ -11,26 +11,26 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Roles
[BindProperty] [BindProperty]
public RoleInfoModel Role { get; set; } public RoleInfoModel Role { get; set; }
private readonly IIdentityRoleAppService _identityRoleAppService; protected IIdentityRoleAppService IdentityRoleAppService { get; }
public EditModalModel(IIdentityRoleAppService identityRoleAppService) public EditModalModel(IIdentityRoleAppService identityRoleAppService)
{ {
_identityRoleAppService = identityRoleAppService; IdentityRoleAppService = identityRoleAppService;
} }
public async Task OnGetAsync(Guid id) public virtual async Task OnGetAsync(Guid id)
{ {
Role = ObjectMapper.Map<IdentityRoleDto, RoleInfoModel>( Role = ObjectMapper.Map<IdentityRoleDto, RoleInfoModel>(
await _identityRoleAppService.GetAsync(id) await IdentityRoleAppService.GetAsync(id)
); );
} }
public async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<RoleInfoModel, IdentityRoleUpdateDto>(Role); var input = ObjectMapper.Map<RoleInfoModel, IdentityRoleUpdateDto>(Role);
await _identityRoleAppService.UpdateAsync(Role.Id, input); await IdentityRoleAppService.UpdateAsync(Role.Id, input);
return NoContent(); return NoContent();
} }

10
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Roles/Index.cshtml.cs

@ -1,9 +1,17 @@
using System.Threading.Tasks;
namespace Volo.Abp.Identity.Web.Pages.Identity.Roles namespace Volo.Abp.Identity.Web.Pages.Identity.Roles
{ {
public class IndexModel : IdentityPageModel public class IndexModel : IdentityPageModel
{ {
public void OnGet() public virtual Task OnGetAsync()
{ {
return Task.CompletedTask;
}
public virtual Task OnPostAsync()
{
return Task.CompletedTask;
} }
} }
} }

16
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs

@ -16,20 +16,20 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
[BindProperty] [BindProperty]
public AssignedRoleViewModel[] Roles { get; set; } public AssignedRoleViewModel[] Roles { get; set; }
private readonly IIdentityUserAppService _identityUserAppService; protected IIdentityUserAppService IdentityUserAppService { get; }
private readonly IIdentityRoleAppService _identityRoleAppService; protected IIdentityRoleAppService IdentityRoleAppService { get; }
public CreateModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService) public CreateModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService)
{ {
_identityUserAppService = identityUserAppService; IdentityUserAppService = identityUserAppService;
_identityRoleAppService = identityRoleAppService; IdentityRoleAppService = identityRoleAppService;
} }
public async Task OnGetAsync() public virtual async Task OnGetAsync()
{ {
UserInfo = new UserInfoViewModel(); UserInfo = new UserInfoViewModel();
var roleDtoList = (await _identityRoleAppService.GetAllListAsync()).Items; var roleDtoList = (await IdentityRoleAppService.GetAllListAsync()).Items;
Roles = ObjectMapper.Map<IReadOnlyList<IdentityRoleDto>, AssignedRoleViewModel[]>(roleDtoList); Roles = ObjectMapper.Map<IReadOnlyList<IdentityRoleDto>, AssignedRoleViewModel[]>(roleDtoList);
@ -39,14 +39,14 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
} }
} }
public async Task<NoContentResult> OnPostAsync() public virtual async Task<NoContentResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserCreateDto>(UserInfo); var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserCreateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray();
await _identityUserAppService.CreateAsync(input); await IdentityUserAppService.CreateAsync(input);
return NoContent(); return NoContent();
} }

20
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs

@ -18,22 +18,22 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
[BindProperty] [BindProperty]
public AssignedRoleViewModel[] Roles { get; set; } public AssignedRoleViewModel[] Roles { get; set; }
private readonly IIdentityUserAppService _identityUserAppService; protected IIdentityUserAppService IdentityUserAppService { get; }
private readonly IIdentityRoleAppService _identityRoleAppService; protected IIdentityRoleAppService IdentityRoleAppService { get; }
public EditModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService) public EditModalModel(IIdentityUserAppService identityUserAppService, IIdentityRoleAppService identityRoleAppService)
{ {
_identityUserAppService = identityUserAppService; IdentityUserAppService = identityUserAppService;
_identityRoleAppService = identityRoleAppService; IdentityRoleAppService = identityRoleAppService;
} }
public async Task OnGetAsync(Guid id) public virtual async Task OnGetAsync(Guid id)
{ {
UserInfo = ObjectMapper.Map<IdentityUserDto, UserInfoViewModel>(await _identityUserAppService.GetAsync(id)); UserInfo = ObjectMapper.Map<IdentityUserDto, UserInfoViewModel>(await IdentityUserAppService.GetAsync(id));
Roles = ObjectMapper.Map<IReadOnlyList<IdentityRoleDto>, AssignedRoleViewModel[]>((await _identityRoleAppService.GetAllListAsync()).Items); Roles = ObjectMapper.Map<IReadOnlyList<IdentityRoleDto>, AssignedRoleViewModel[]>((await IdentityRoleAppService.GetAllListAsync()).Items);
var userRoleNames = (await _identityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList(); var userRoleNames = (await IdentityUserAppService.GetRolesAsync(UserInfo.Id)).Items.Select(r => r.Name).ToList();
foreach (var role in Roles) foreach (var role in Roles)
{ {
if (userRoleNames.Contains(role.Name)) if (userRoleNames.Contains(role.Name))
@ -43,13 +43,13 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users
} }
} }
public async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserUpdateDto>(UserInfo); var input = ObjectMapper.Map<UserInfoViewModel, IdentityUserUpdateDto>(UserInfo);
input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray(); input.RoleNames = Roles.Where(r => r.IsAssigned).Select(r => r.Name).ToArray();
await _identityUserAppService.UpdateAsync(UserInfo.Id, input); await IdentityUserAppService.UpdateAsync(UserInfo.Id, input);
return NoContent(); return NoContent();
} }

11
modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/Index.cshtml.cs

@ -1,10 +1,17 @@
namespace Volo.Abp.Identity.Web.Pages.Identity.Users using System.Threading.Tasks;
namespace Volo.Abp.Identity.Web.Pages.Identity.Users
{ {
public class IndexModel : IdentityPageModel public class IndexModel : IdentityPageModel
{ {
public void OnGet() public virtual Task OnGetAsync()
{ {
return Task.CompletedTask;
}
public virtual Task OnPostAsync()
{
return Task.CompletedTask;
} }
} }
} }

2
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AbpCorsPolicyService.cs

@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer
Logger = NullLogger<AbpCorsPolicyService>.Instance; Logger = NullLogger<AbpCorsPolicyService>.Instance;
} }
public async Task<bool> IsOriginAllowedAsync(string origin) public virtual async Task<bool> IsOriginAllowedAsync(string origin)
{ {
var cacheItem = await Cache.GetOrAddAsync(AllowedCorsOriginsCacheItem.AllOrigins, CreateCacheItemAsync); var cacheItem = await Cache.GetOrAddAsync(AllowedCorsOriginsCacheItem.AllOrigins, CreateCacheItemAsync);

4
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AllowedCorsOriginsCacheItemInvalidator.cs

@ -19,12 +19,12 @@ namespace Volo.Abp.IdentityServer
Cache = cache; Cache = cache;
} }
public async Task HandleEventAsync(EntityChangedEventData<Client> eventData) public virtual async Task HandleEventAsync(EntityChangedEventData<Client> eventData)
{ {
await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins); await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins);
} }
public async Task HandleEventAsync(EntityChangedEventData<ClientCorsOrigin> eventData) public virtual async Task HandleEventAsync(EntityChangedEventData<ClientCorsOrigin> eventData)
{ {
await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins); await Cache.RemoveAsync(AllowedCorsOriginsCacheItem.AllOrigins);
} }

8
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpProfileService.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
{ {
public class AbpProfileService : ProfileService<IdentityUser> public class AbpProfileService : ProfileService<IdentityUser>
{ {
private readonly ICurrentTenant _currentTenant; protected ICurrentTenant CurrentTenant { get; }
public AbpProfileService( public AbpProfileService(
IdentityUserManager userManager, IdentityUserManager userManager,
@ -20,13 +20,13 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
ICurrentTenant currentTenant) ICurrentTenant currentTenant)
: base(userManager, claimsFactory) : base(userManager, claimsFactory)
{ {
_currentTenant = currentTenant; CurrentTenant = currentTenant;
} }
[UnitOfWork] [UnitOfWork]
public override async Task GetProfileDataAsync(ProfileDataRequestContext context) public override async Task GetProfileDataAsync(ProfileDataRequestContext context)
{ {
using (_currentTenant.Change(context.Subject.FindTenantId())) using (CurrentTenant.Change(context.Subject.FindTenantId()))
{ {
await base.GetProfileDataAsync(context); await base.GetProfileDataAsync(context);
} }
@ -35,7 +35,7 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
[UnitOfWork] [UnitOfWork]
public override async Task IsActiveAsync(IsActiveContext context) public override async Task IsActiveAsync(IsActiveContext context)
{ {
using (_currentTenant.Change(context.Subject.FindTenantId())) using (CurrentTenant.Change(context.Subject.FindTenantId()))
{ {
await base.IsActiveAsync(context); await base.IsActiveAsync(context);
} }

58
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/AspNetIdentity/AbpResourceOwnerPasswordValidator.cs

@ -20,11 +20,11 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
{ {
public class AbpResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator public class AbpResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
{ {
private readonly SignInManager<IdentityUser> _signInManager; protected SignInManager<IdentityUser> SignInManager { get; }
private readonly IEventService _events; protected IEventService Events { get; }
private readonly UserManager<IdentityUser> _userManager; protected UserManager<IdentityUser> UserManager { get; }
private readonly ILogger<ResourceOwnerPasswordValidator<IdentityUser>> _logger; protected ILogger<ResourceOwnerPasswordValidator<IdentityUser>> Logger { get; }
private readonly IStringLocalizer<AbpIdentityServerResource> _localizer; protected IStringLocalizer<AbpIdentityServerResource> Localizer { get; }
public AbpResourceOwnerPasswordValidator( public AbpResourceOwnerPasswordValidator(
UserManager<IdentityUser> userManager, UserManager<IdentityUser> userManager,
@ -33,11 +33,11 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
ILogger<ResourceOwnerPasswordValidator<IdentityUser>> logger, ILogger<ResourceOwnerPasswordValidator<IdentityUser>> logger,
IStringLocalizer<AbpIdentityServerResource> localizer) IStringLocalizer<AbpIdentityServerResource> localizer)
{ {
_userManager = userManager; UserManager = userManager;
_signInManager = signInManager; SignInManager = signInManager;
_events = events; Events = events;
_logger = logger; Logger = logger;
_localizer = localizer; Localizer = localizer;
} }
/// <summary> /// <summary>
@ -49,17 +49,17 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
public virtual async Task ValidateAsync(ResourceOwnerPasswordValidationContext context) public virtual async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
{ {
await ReplaceEmailToUsernameOfInputIfNeeds(context); await ReplaceEmailToUsernameOfInputIfNeeds(context);
var user = await _userManager.FindByNameAsync(context.UserName); var user = await UserManager.FindByNameAsync(context.UserName);
string errorDescription; string errorDescription;
if (user != null) if (user != null)
{ {
var result = await _signInManager.CheckPasswordSignInAsync(user, context.Password, true); var result = await SignInManager.CheckPasswordSignInAsync(user, context.Password, true);
if (result.Succeeded) if (result.Succeeded)
{ {
var sub = await _userManager.GetUserIdAsync(user); var sub = await UserManager.GetUserIdAsync(user);
_logger.LogInformation("Credentials validated for username: {username}", context.UserName); Logger.LogInformation("Credentials validated for username: {username}", context.UserName);
await _events.RaiseAsync(new UserLoginSuccessEvent(context.UserName, sub, context.UserName, interactive: false)); await Events.RaiseAsync(new UserLoginSuccessEvent(context.UserName, sub, context.UserName, interactive: false));
var additionalClaims = new List<Claim>(); var additionalClaims = new List<Claim>();
@ -75,28 +75,28 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
} }
else if (result.IsLockedOut) else if (result.IsLockedOut)
{ {
_logger.LogInformation("Authentication failed for username: {username}, reason: locked out", context.UserName); Logger.LogInformation("Authentication failed for username: {username}, reason: locked out", context.UserName);
await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "locked out", interactive: false)); await Events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "locked out", interactive: false));
errorDescription = _localizer["UserLockedOut"]; errorDescription = Localizer["UserLockedOut"];
} }
else if (result.IsNotAllowed) else if (result.IsNotAllowed)
{ {
_logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", context.UserName); Logger.LogInformation("Authentication failed for username: {username}, reason: not allowed", context.UserName);
await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "not allowed", interactive: false)); await Events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "not allowed", interactive: false));
errorDescription = _localizer["LoginIsNotAllowed"]; errorDescription = Localizer["LoginIsNotAllowed"];
} }
else else
{ {
_logger.LogInformation("Authentication failed for username: {username}, reason: invalid credentials", context.UserName); Logger.LogInformation("Authentication failed for username: {username}, reason: invalid credentials", context.UserName);
await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid credentials", interactive: false)); await Events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid credentials", interactive: false));
errorDescription = _localizer["InvalidUserNameOrPassword"]; errorDescription = Localizer["InvalidUserNameOrPassword"];
} }
} }
else else
{ {
_logger.LogInformation("No user found matching username: {username}", context.UserName); Logger.LogInformation("No user found matching username: {username}", context.UserName);
await _events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid username", interactive: false)); await Events.RaiseAsync(new UserLoginFailureEvent(context.UserName, "invalid username", interactive: false));
errorDescription = _localizer["InvalidUsername"]; errorDescription = Localizer["InvalidUsername"];
} }
context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, errorDescription); context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, errorDescription);
@ -109,13 +109,13 @@ namespace Volo.Abp.IdentityServer.AspNetIdentity
return; return;
} }
var userByUsername = await _userManager.FindByNameAsync(context.UserName); var userByUsername = await UserManager.FindByNameAsync(context.UserName);
if (userByUsername != null) if (userByUsername != null)
{ {
return; return;
} }
var userByEmail = await _userManager.FindByEmailAsync(context.UserName); var userByEmail = await UserManager.FindByEmailAsync(context.UserName);
if (userByEmail == null) if (userByEmail == null)
{ {
return; return;

12
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Clients/ClientStore.cs

@ -6,19 +6,19 @@ namespace Volo.Abp.IdentityServer.Clients
{ {
public class ClientStore : IClientStore public class ClientStore : IClientStore
{ {
private readonly IClientRepository _clientRepository; protected IClientRepository ClientRepository { get; }
private readonly IObjectMapper<AbpIdentityServerDomainModule> _objectMapper; protected IObjectMapper<AbpIdentityServerDomainModule> ObjectMapper { get; }
public ClientStore(IClientRepository clientRepository, IObjectMapper<AbpIdentityServerDomainModule> objectMapper) public ClientStore(IClientRepository clientRepository, IObjectMapper<AbpIdentityServerDomainModule> objectMapper)
{ {
_clientRepository = clientRepository; ClientRepository = clientRepository;
_objectMapper = objectMapper; ObjectMapper = objectMapper;
} }
public virtual async Task<IdentityServer4.Models.Client> FindClientByIdAsync(string clientId) public virtual async Task<IdentityServer4.Models.Client> FindClientByIdAsync(string clientId)
{ {
var client = await _clientRepository.FindByCliendIdAsync(clientId); var client = await ClientRepository.FindByCliendIdAsync(clientId);
return _objectMapper.Map<Client, IdentityServer4.Models.Client>(client); return ObjectMapper.Map<Client, IdentityServer4.Models.Client>(client);
} }
} }
} }

2
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowCodes.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.IdentityServer.Devices
public virtual string Data { get; set; } public virtual string Data { get; set; }
private DeviceFlowCodes() protected DeviceFlowCodes()
{ {
} }

12
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Devices/DeviceFlowStore.cs

@ -26,7 +26,7 @@ namespace Volo.Abp.IdentityServer.Devices
PersistentGrantSerializer = persistentGrantSerializer; PersistentGrantSerializer = persistentGrantSerializer;
} }
public async Task StoreDeviceAuthorizationAsync(string deviceCode, string userCode, DeviceCode data) public virtual async Task StoreDeviceAuthorizationAsync(string deviceCode, string userCode, DeviceCode data)
{ {
Check.NotNull(deviceCode, nameof(deviceCode)); Check.NotNull(deviceCode, nameof(deviceCode));
Check.NotNull(userCode, nameof(userCode)); Check.NotNull(userCode, nameof(userCode));
@ -47,7 +47,7 @@ namespace Volo.Abp.IdentityServer.Devices
); );
} }
public async Task<DeviceCode> FindByUserCodeAsync(string userCode) public virtual async Task<DeviceCode> FindByUserCodeAsync(string userCode)
{ {
Check.NotNull(userCode, nameof(userCode)); Check.NotNull(userCode, nameof(userCode));
@ -63,7 +63,7 @@ namespace Volo.Abp.IdentityServer.Devices
return DeserializeToDeviceCode(deviceCodes.Data); return DeserializeToDeviceCode(deviceCodes.Data);
} }
public async Task<DeviceCode> FindByDeviceCodeAsync(string deviceCode) public virtual async Task<DeviceCode> FindByDeviceCodeAsync(string deviceCode)
{ {
Check.NotNull(deviceCode, nameof(deviceCode)); Check.NotNull(deviceCode, nameof(deviceCode));
@ -79,7 +79,7 @@ namespace Volo.Abp.IdentityServer.Devices
return DeserializeToDeviceCode(deviceCodes.Data); return DeserializeToDeviceCode(deviceCodes.Data);
} }
public async Task UpdateByUserCodeAsync(string userCode, DeviceCode data) public virtual async Task UpdateByUserCodeAsync(string userCode, DeviceCode data)
{ {
Check.NotNull(userCode, nameof(userCode)); Check.NotNull(userCode, nameof(userCode));
Check.NotNull(data, nameof(data)); Check.NotNull(data, nameof(data));
@ -102,7 +102,7 @@ namespace Volo.Abp.IdentityServer.Devices
; ;
} }
public async Task RemoveByDeviceCodeAsync(string deviceCode) public virtual async Task RemoveByDeviceCodeAsync(string deviceCode)
{ {
Check.NotNull(deviceCode, nameof(deviceCode)); Check.NotNull(deviceCode, nameof(deviceCode));
@ -120,7 +120,7 @@ namespace Volo.Abp.IdentityServer.Devices
; ;
} }
private string Serialize([CanBeNull] DeviceCode deviceCode) protected virtual string Serialize([CanBeNull] DeviceCode deviceCode)
{ {
if (deviceCode == null) if (deviceCode == null)
{ {

40
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/Grants/PersistedGrantStore.cs

@ -10,65 +10,65 @@ namespace Volo.Abp.IdentityServer.Grants
{ {
public class PersistedGrantStore : IPersistedGrantStore public class PersistedGrantStore : IPersistedGrantStore
{ {
private readonly IPersistentGrantRepository _persistentGrantRepository; protected IPersistentGrantRepository PersistentGrantRepository { get; }
private readonly IObjectMapper<AbpIdentityServerDomainModule> _objectMapper; protected IObjectMapper<AbpIdentityServerDomainModule> ObjectMapper { get; }
private readonly IGuidGenerator _guidGenerator; protected IGuidGenerator GuidGenerator { get; }
public PersistedGrantStore(IPersistentGrantRepository persistentGrantRepository, public PersistedGrantStore(IPersistentGrantRepository persistentGrantRepository,
IObjectMapper<AbpIdentityServerDomainModule> objectMapper, IGuidGenerator guidGenerator) IObjectMapper<AbpIdentityServerDomainModule> objectMapper, IGuidGenerator guidGenerator)
{ {
_persistentGrantRepository = persistentGrantRepository; PersistentGrantRepository = persistentGrantRepository;
_objectMapper = objectMapper; ObjectMapper = objectMapper;
_guidGenerator = guidGenerator; GuidGenerator = guidGenerator;
} }
public virtual async Task StoreAsync(IdentityServer4.Models.PersistedGrant grant) public virtual async Task StoreAsync(IdentityServer4.Models.PersistedGrant grant)
{ {
var entity = await _persistentGrantRepository.FindByKeyAsync(grant.Key); var entity = await PersistentGrantRepository.FindByKeyAsync(grant.Key);
if (entity == null) if (entity == null)
{ {
entity = _objectMapper.Map<IdentityServer4.Models.PersistedGrant, PersistedGrant>(grant); entity = ObjectMapper.Map<IdentityServer4.Models.PersistedGrant, PersistedGrant>(grant);
EntityHelper.TrySetId(entity, () => _guidGenerator.Create()); EntityHelper.TrySetId(entity, () => GuidGenerator.Create());
await _persistentGrantRepository.InsertAsync(entity); await PersistentGrantRepository.InsertAsync(entity);
} }
else else
{ {
_objectMapper.Map(grant, entity); ObjectMapper.Map(grant, entity);
await _persistentGrantRepository.UpdateAsync(entity); await PersistentGrantRepository.UpdateAsync(entity);
} }
} }
public virtual async Task<IdentityServer4.Models.PersistedGrant> GetAsync(string key) public virtual async Task<IdentityServer4.Models.PersistedGrant> GetAsync(string key)
{ {
var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); var persistedGrant = await PersistentGrantRepository.FindByKeyAsync(key);
return _objectMapper.Map<PersistedGrant, IdentityServer4.Models.PersistedGrant>(persistedGrant); return ObjectMapper.Map<PersistedGrant, IdentityServer4.Models.PersistedGrant>(persistedGrant);
} }
public virtual async Task<IEnumerable<IdentityServer4.Models.PersistedGrant>> GetAllAsync(string subjectId) public virtual async Task<IEnumerable<IdentityServer4.Models.PersistedGrant>> GetAllAsync(string subjectId)
{ {
var persistedGrants = await _persistentGrantRepository.GetListBySubjectIdAsync(subjectId); var persistedGrants = await PersistentGrantRepository.GetListBySubjectIdAsync(subjectId);
return persistedGrants.Select(x => _objectMapper.Map<PersistedGrant, IdentityServer4.Models.PersistedGrant>(x)); return persistedGrants.Select(x => ObjectMapper.Map<PersistedGrant, IdentityServer4.Models.PersistedGrant>(x));
} }
public virtual async Task RemoveAsync(string key) public virtual async Task RemoveAsync(string key)
{ {
var persistedGrant = await _persistentGrantRepository.FindByKeyAsync(key); var persistedGrant = await PersistentGrantRepository.FindByKeyAsync(key);
if (persistedGrant == null) if (persistedGrant == null)
{ {
return; return;
} }
await _persistentGrantRepository.DeleteAsync(persistedGrant); await PersistentGrantRepository.DeleteAsync(persistedGrant);
} }
public virtual async Task RemoveAllAsync(string subjectId, string clientId) public virtual async Task RemoveAllAsync(string subjectId, string clientId)
{ {
await _persistentGrantRepository.DeleteAsync(subjectId, clientId); await PersistentGrantRepository.DeleteAsync(subjectId, clientId);
} }
public virtual async Task RemoveAllAsync(string subjectId, string clientId, string type) public virtual async Task RemoveAllAsync(string subjectId, string clientId, string type)
{ {
await _persistentGrantRepository.DeleteAsync(subjectId, clientId, type); await PersistentGrantRepository.DeleteAsync(subjectId, clientId, type);
} }
} }
} }

32
modules/identityserver/src/Volo.Abp.IdentityServer.Domain/Volo/Abp/IdentityServer/ResourceStore.cs

@ -13,46 +13,46 @@ namespace Volo.Abp.IdentityServer
{ {
public class ResourceStore : IResourceStore public class ResourceStore : IResourceStore
{ {
private readonly IIdentityResourceRepository _identityResourceRepository; protected IIdentityResourceRepository IdentityResourceRepository { get; }
private readonly IApiResourceRepository _apiResourceRepository; protected IApiResourceRepository ApiResourceRepository { get; }
private readonly IObjectMapper<AbpIdentityServerDomainModule> _objectMapper; protected IObjectMapper<AbpIdentityServerDomainModule> ObjectMapper { get; }
public ResourceStore( public ResourceStore(
IIdentityResourceRepository identityResourceRepository, IIdentityResourceRepository identityResourceRepository,
IObjectMapper<AbpIdentityServerDomainModule> objectMapper, IObjectMapper<AbpIdentityServerDomainModule> objectMapper,
IApiResourceRepository apiResourceRepository) IApiResourceRepository apiResourceRepository)
{ {
_identityResourceRepository = identityResourceRepository; IdentityResourceRepository = identityResourceRepository;
_objectMapper = objectMapper; ObjectMapper = objectMapper;
_apiResourceRepository = apiResourceRepository; ApiResourceRepository = apiResourceRepository;
} }
public virtual async Task<IEnumerable<IdentityServer4.Models.IdentityResource>> FindIdentityResourcesByScopeAsync(IEnumerable<string> scopeNames) public virtual async Task<IEnumerable<IdentityServer4.Models.IdentityResource>> FindIdentityResourcesByScopeAsync(IEnumerable<string> scopeNames)
{ {
var resource = await _identityResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true); var resource = await IdentityResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true);
return _objectMapper.Map<List<IdentityResource>, List<IdentityServer4.Models.IdentityResource>>(resource); return ObjectMapper.Map<List<IdentityResource>, List<IdentityServer4.Models.IdentityResource>>(resource);
} }
public virtual async Task<IEnumerable<ApiResource>> FindApiResourcesByScopeAsync(IEnumerable<string> scopeNames) public virtual async Task<IEnumerable<ApiResource>> FindApiResourcesByScopeAsync(IEnumerable<string> scopeNames)
{ {
var resources = await _apiResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true); var resources = await ApiResourceRepository.GetListByScopesAsync(scopeNames.ToArray(), includeDetails: true);
return resources.Select(x => _objectMapper.Map<ApiResources.ApiResource, ApiResource>(x)); return resources.Select(x => ObjectMapper.Map<ApiResources.ApiResource, ApiResource>(x));
} }
public virtual async Task<ApiResource> FindApiResourceAsync(string name) public virtual async Task<ApiResource> FindApiResourceAsync(string name)
{ {
var resource = await _apiResourceRepository.FindByNameAsync(name); var resource = await ApiResourceRepository.FindByNameAsync(name);
return _objectMapper.Map<ApiResources.ApiResource, ApiResource>(resource); return ObjectMapper.Map<ApiResources.ApiResource, ApiResource>(resource);
} }
public virtual async Task<Resources> GetAllResourcesAsync() public virtual async Task<Resources> GetAllResourcesAsync()
{ {
var identityResources = await _identityResourceRepository.GetListAsync(includeDetails: true); var identityResources = await IdentityResourceRepository.GetListAsync(includeDetails: true);
var apiResources = await _apiResourceRepository.GetListAsync(includeDetails: true); var apiResources = await ApiResourceRepository.GetListAsync(includeDetails: true);
return new Resources( return new Resources(
_objectMapper.Map<List<IdentityResource>, IdentityServer4.Models.IdentityResource[]>(identityResources), ObjectMapper.Map<List<IdentityResource>, IdentityServer4.Models.IdentityResource[]>(identityResources),
_objectMapper.Map<List<ApiResources.ApiResource>, ApiResource[]>(apiResources) ObjectMapper.Map<List<ApiResources.ApiResource>, ApiResource[]>(apiResources)
); );
} }
} }

2
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/ApiResources/ApiResourceRepository.cs

@ -61,7 +61,7 @@ namespace Volo.Abp.IdentityServer.ApiResources
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken); return await DbSet.AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken);
} }

4
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Clients/ClientRepository.cs

@ -37,7 +37,7 @@ namespace Volo.Abp.IdentityServer.Clients
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<List<string>> GetAllDistinctAllowedCorsOriginsAsync(CancellationToken cancellationToken = default) public virtual async Task<List<string>> GetAllDistinctAllowedCorsOriginsAsync(CancellationToken cancellationToken = default)
{ {
return await DbContext.ClientCorsOrigins return await DbContext.ClientCorsOrigins
.Select(x => x.Origin) .Select(x => x.Origin)
@ -45,7 +45,7 @@ namespace Volo.Abp.IdentityServer.Clients
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<bool> CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); return await DbSet.AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken);
} }

6
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Devices/DeviceFlowCodesRepository.cs

@ -19,7 +19,7 @@ namespace Volo.Abp.IdentityServer.Devices
} }
public async Task<DeviceFlowCodes> FindByUserCodeAsync( public virtual async Task<DeviceFlowCodes> FindByUserCodeAsync(
string userCode, string userCode,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -28,7 +28,7 @@ namespace Volo.Abp.IdentityServer.Devices
; ;
} }
public async Task<DeviceFlowCodes> FindByDeviceCodeAsync( public virtual async Task<DeviceFlowCodes> FindByDeviceCodeAsync(
string deviceCode, string deviceCode,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -36,7 +36,7 @@ namespace Volo.Abp.IdentityServer.Devices
.FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken));
} }
public async Task<List<DeviceFlowCodes>> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, public virtual async Task<List<DeviceFlowCodes>> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await DbSet return await DbSet

10
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/Grants/PersistedGrantRepository.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.IdentityServer.Grants
} }
public async Task<PersistedGrant> FindByKeyAsync( public virtual async Task<PersistedGrant> FindByKeyAsync(
string key, string key,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -27,7 +27,7 @@ namespace Volo.Abp.IdentityServer.Grants
; ;
} }
public async Task<List<PersistedGrant>> GetListBySubjectIdAsync( public virtual async Task<List<PersistedGrant>> GetListBySubjectIdAsync(
string subjectId, string subjectId,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -36,7 +36,7 @@ namespace Volo.Abp.IdentityServer.Grants
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<List<PersistedGrant>> GetListByExpirationAsync( public virtual async Task<List<PersistedGrant>> GetListByExpirationAsync(
DateTime maxExpirationDate, DateTime maxExpirationDate,
int maxResultCount, int maxResultCount,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -48,7 +48,7 @@ namespace Volo.Abp.IdentityServer.Grants
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task DeleteAsync( public virtual async Task DeleteAsync(
string subjectId, string subjectId,
string clientId, string clientId,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -59,7 +59,7 @@ namespace Volo.Abp.IdentityServer.Grants
); );
} }
public async Task DeleteAsync( public virtual async Task DeleteAsync(
string subjectId, string subjectId,
string clientId, string clientId,
string type, string type,

4
modules/identityserver/src/Volo.Abp.IdentityServer.EntityFrameworkCore/Volo/Abp/IdentityServer/IdentityResources/IdentityResourceRepository.cs

@ -46,7 +46,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<IdentityResource> FindByNameAsync( public virtual async Task<IdentityResource> FindByNameAsync(
string name, string name,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -57,7 +57,7 @@ namespace Volo.Abp.IdentityServer.IdentityResources
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
} }
public async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); return await DbSet.AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken);
} }

2
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoApiResourceRepository.cs

@ -48,7 +48,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
return await GetCountAsync(); return await GetCountAsync();
} }
public async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken); return await GetMongoQueryable().AnyAsync(ar => ar.Id != expectedId && ar.Name == name, cancellationToken: cancellationToken);
} }

4
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoClientRepository.cs

@ -43,7 +43,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<List<string>> GetAllDistinctAllowedCorsOriginsAsync( public virtual async Task<List<string>> GetAllDistinctAllowedCorsOriginsAsync(
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
@ -53,7 +53,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<bool> CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckClientIdExistAsync(string clientId, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable().AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken); return await GetMongoQueryable().AnyAsync(c => c.Id != expectedId && c.ClientId == clientId, cancellationToken: cancellationToken);
} }

6
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoDeviceFlowCodesRepository.cs

@ -19,7 +19,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
} }
public async Task<DeviceFlowCodes> FindByUserCodeAsync( public virtual async Task<DeviceFlowCodes> FindByUserCodeAsync(
string userCode, string userCode,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
@ -28,13 +28,13 @@ namespace Volo.Abp.IdentityServer.MongoDB
; ;
} }
public async Task<DeviceFlowCodes> FindByDeviceCodeAsync(string deviceCode, CancellationToken cancellationToken = default) public virtual async Task<DeviceFlowCodes> FindByDeviceCodeAsync(string deviceCode, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
.FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(d => d.DeviceCode == deviceCode, GetCancellationToken(cancellationToken));
} }
public async Task<List<DeviceFlowCodes>> GetListByExpirationAsync( public virtual async Task<List<DeviceFlowCodes>> GetListByExpirationAsync(
DateTime maxExpirationDate, DateTime maxExpirationDate,
int maxResultCount, int maxResultCount,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)

6
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoIdentityResourceRepository.cs

@ -27,7 +27,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<IdentityResource> FindByNameAsync( public virtual async Task<IdentityResource> FindByNameAsync(
string name, string name,
bool includeDetails = true, bool includeDetails = true,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
@ -37,7 +37,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
.FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(GetCancellationToken(cancellationToken));
} }
public async Task<List<IdentityResource>> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false, public virtual async Task<List<IdentityResource>> GetListByScopesAsync(string[] scopeNames, bool includeDetails = false,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
@ -50,7 +50,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
return await GetCountAsync(); return await GetCountAsync();
} }
public async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default) public virtual async Task<bool> CheckNameExistAsync(string name, Guid? expectedId = null, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken); return await GetMongoQueryable().AnyAsync(ir => ir.Id != expectedId && ir.Name == name, cancellationToken: cancellationToken);
} }

10
modules/identityserver/src/Volo.Abp.IdentityServer.MongoDB/Volo/Abp/IdentityServer/MongoDB/MongoPersistedGrantRepository.cs

@ -16,14 +16,14 @@ namespace Volo.Abp.IdentityServer.MongoDB
{ {
} }
public async Task<PersistedGrant> FindByKeyAsync(string key, CancellationToken cancellationToken = default) public virtual async Task<PersistedGrant> FindByKeyAsync(string key, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
.FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(x => x.Key == key, GetCancellationToken(cancellationToken));
} }
public async Task<List<PersistedGrant>> GetListBySubjectIdAsync(string subjectId, CancellationToken cancellationToken = default) public virtual async Task<List<PersistedGrant>> GetListBySubjectIdAsync(string subjectId, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
.Where(x => x.SubjectId == subjectId) .Where(x => x.SubjectId == subjectId)
@ -31,7 +31,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
; ;
} }
public async Task<List<PersistedGrant>> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount, public virtual async Task<List<PersistedGrant>> GetListByExpirationAsync(DateTime maxExpirationDate, int maxResultCount,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
@ -41,7 +41,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task DeleteAsync(string subjectId, string clientId, CancellationToken cancellationToken = default) public virtual async Task DeleteAsync(string subjectId, string clientId, CancellationToken cancellationToken = default)
{ {
await DeleteAsync( await DeleteAsync(
x => x.SubjectId == subjectId && x.ClientId == clientId, x => x.SubjectId == subjectId && x.ClientId == clientId,
@ -49,7 +49,7 @@ namespace Volo.Abp.IdentityServer.MongoDB
); );
} }
public async Task DeleteAsync(string subjectId, string clientId, string type, CancellationToken cancellationToken = default) public virtual async Task DeleteAsync(string subjectId, string clientId, string type, CancellationToken cancellationToken = default)
{ {
await DeleteAsync( await DeleteAsync(
x => x.SubjectId == subjectId && x.ClientId == clientId && x.Type == type, x => x.SubjectId == subjectId && x.ClientId == clientId && x.Type == type,

21
modules/permission-management/src/Volo.Abp.PermissionManagement.Application/Volo/Abp/PermissionManagement/PermissionAppService.cs

@ -16,20 +16,17 @@ namespace Volo.Abp.PermissionManagement
{ {
protected PermissionManagementOptions Options { get; } protected PermissionManagementOptions Options { get; }
private readonly IPermissionManager _permissionManager; protected IPermissionManager PermissionManager { get; }
private readonly IPermissionDefinitionManager _permissionDefinitionManager; protected IPermissionDefinitionManager PermissionDefinitionManager { get; }
private readonly IStringLocalizerFactory _stringLocalizerFactory;
public PermissionAppService( public PermissionAppService(
IPermissionManager permissionManager, IPermissionManager permissionManager,
IPermissionDefinitionManager permissionDefinitionManager, IPermissionDefinitionManager permissionDefinitionManager,
IStringLocalizerFactory stringLocalizerFactory,
IOptions<PermissionManagementOptions> options) IOptions<PermissionManagementOptions> options)
{ {
Options = options.Value; Options = options.Value;
_permissionManager = permissionManager; PermissionManager = permissionManager;
_permissionDefinitionManager = permissionDefinitionManager; PermissionDefinitionManager = permissionDefinitionManager;
_stringLocalizerFactory = stringLocalizerFactory;
} }
public virtual async Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey) public virtual async Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey)
@ -44,12 +41,12 @@ namespace Volo.Abp.PermissionManagement
var multiTenancySide = CurrentTenant.GetMultiTenancySide(); var multiTenancySide = CurrentTenant.GetMultiTenancySide();
foreach (var group in _permissionDefinitionManager.GetGroups()) foreach (var group in PermissionDefinitionManager.GetGroups())
{ {
var groupDto = new PermissionGroupDto var groupDto = new PermissionGroupDto
{ {
Name = group.Name, Name = group.Name,
DisplayName = group.DisplayName.Localize(_stringLocalizerFactory), DisplayName = group.DisplayName.Localize(StringLocalizerFactory),
Permissions = new List<PermissionGrantInfoDto>() Permissions = new List<PermissionGrantInfoDto>()
}; };
@ -68,13 +65,13 @@ namespace Volo.Abp.PermissionManagement
var grantInfoDto = new PermissionGrantInfoDto var grantInfoDto = new PermissionGrantInfoDto
{ {
Name = permission.Name, Name = permission.Name,
DisplayName = permission.DisplayName.Localize(_stringLocalizerFactory), DisplayName = permission.DisplayName.Localize(StringLocalizerFactory),
ParentName = permission.Parent?.Name, ParentName = permission.Parent?.Name,
AllowedProviders = permission.Providers, AllowedProviders = permission.Providers,
GrantedProviders = new List<ProviderInfoDto>() GrantedProviders = new List<ProviderInfoDto>()
}; };
var grantInfo = await _permissionManager.GetAsync(permission.Name, providerName, providerKey); var grantInfo = await PermissionManager.GetAsync(permission.Name, providerName, providerKey);
grantInfoDto.IsGranted = grantInfo.IsGranted; grantInfoDto.IsGranted = grantInfo.IsGranted;
@ -105,7 +102,7 @@ namespace Volo.Abp.PermissionManagement
foreach (var permissionDto in input.Permissions) foreach (var permissionDto in input.Permissions)
{ {
await _permissionManager.SetAsync(permissionDto.Name, providerName, providerKey, permissionDto.IsGranted); await PermissionManager.SetAsync(permissionDto.Name, providerName, providerKey, permissionDto.IsGranted);
} }
} }

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionDataSeeder.cs

@ -19,7 +19,7 @@ namespace Volo.Abp.PermissionManagement
GuidGenerator = guidGenerator; GuidGenerator = guidGenerator;
} }
public async Task SeedAsync( public virtual async Task SeedAsync(
string providerName, string providerName,
string providerKey, string providerKey,
IEnumerable<string> grantedPermissions, IEnumerable<string> grantedPermissions,

8
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionManager.cs

@ -50,12 +50,12 @@ namespace Volo.Abp.PermissionManagement
); );
} }
public async Task<PermissionWithGrantedProviders> GetAsync(string permissionName, string providerName, string providerKey) public virtual async Task<PermissionWithGrantedProviders> GetAsync(string permissionName, string providerName, string providerKey)
{ {
return await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey); return await GetInternalAsync(PermissionDefinitionManager.Get(permissionName), providerName, providerKey);
} }
public async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string providerName, string providerKey) public virtual async Task<List<PermissionWithGrantedProviders>> GetAllAsync(string providerName, string providerKey)
{ {
var results = new List<PermissionWithGrantedProviders>(); var results = new List<PermissionWithGrantedProviders>();
@ -67,7 +67,7 @@ namespace Volo.Abp.PermissionManagement
return results; return results;
} }
public async Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted) public virtual async Task SetAsync(string permissionName, string providerName, string providerKey, bool isGranted)
{ {
var permission = PermissionDefinitionManager.Get(permissionName); var permission = PermissionDefinitionManager.Get(permissionName);
@ -99,7 +99,7 @@ namespace Volo.Abp.PermissionManagement
await provider.SetAsync(permissionName, providerKey, isGranted); await provider.SetAsync(permissionName, providerKey, isGranted);
} }
public async Task<PermissionGrant> UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey) public virtual async Task<PermissionGrant> UpdateProviderKeyAsync(PermissionGrant permissionGrant, string providerKey)
{ {
permissionGrant.ProviderKey = providerKey; permissionGrant.ProviderKey = providerKey;
return await PermissionGrantRepository.UpdateAsync(permissionGrant); return await PermissionGrantRepository.UpdateAsync(permissionGrant);

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Domain/Volo/Abp/PermissionManagement/PermissionStore.cs

@ -24,7 +24,7 @@ namespace Volo.Abp.PermissionManagement
Logger = NullLogger<PermissionStore>.Instance; Logger = NullLogger<PermissionStore>.Instance;
} }
public async Task<bool> IsGrantedAsync(string name, string providerName, string providerKey) public virtual async Task<bool> IsGrantedAsync(string name, string providerName, string providerKey)
{ {
return (await GetCacheItemAsync(name, providerName, providerKey)).IsGranted; return (await GetCacheItemAsync(name, providerName, providerKey)).IsGranted;
} }

4
modules/permission-management/src/Volo.Abp.PermissionManagement.EntityFrameworkCore/Volo/Abp/PermissionManagement/EntityFrameworkCore/EfCorePermissionGrantRepository.cs

@ -18,7 +18,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore
} }
public async Task<PermissionGrant> FindAsync( public virtual async Task<PermissionGrant> FindAsync(
string name, string name,
string providerName, string providerName,
string providerKey, string providerKey,
@ -33,7 +33,7 @@ namespace Volo.Abp.PermissionManagement.EntityFrameworkCore
); );
} }
public async Task<List<PermissionGrant>> GetListAsync( public virtual async Task<List<PermissionGrant>> GetListAsync(
string providerName, string providerName,
string providerKey, string providerKey,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)

12
modules/permission-management/src/Volo.Abp.PermissionManagement.HttpApi/Volo/Abp/PermissionManagement/PermissionsController.cs

@ -8,21 +8,21 @@ namespace Volo.Abp.PermissionManagement
[Area("abp")] [Area("abp")]
public class PermissionsController : AbpController, IPermissionAppService public class PermissionsController : AbpController, IPermissionAppService
{ {
private readonly IPermissionAppService _permissionAppService; protected IPermissionAppService PermissionAppService { get; }
public PermissionsController(IPermissionAppService permissionAppService) public PermissionsController(IPermissionAppService permissionAppService)
{ {
_permissionAppService = permissionAppService; PermissionAppService = permissionAppService;
} }
public Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey) public virtual Task<GetPermissionListResultDto> GetAsync(string providerName, string providerKey)
{ {
return _permissionAppService.GetAsync(providerName, providerKey); return PermissionAppService.GetAsync(providerName, providerKey);
} }
public Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input) public virtual Task UpdateAsync(string providerName, string providerKey, UpdatePermissionsDto input)
{ {
return _permissionAppService.UpdateAsync(providerName, providerKey, input); return PermissionAppService.UpdateAsync(providerName, providerKey, input);
} }
} }
} }

4
modules/permission-management/src/Volo.Abp.PermissionManagement.MongoDB/Volo/Abp/PermissionManagement/MongoDb/MongoPermissionGrantRepository.cs

@ -17,7 +17,7 @@ namespace Volo.Abp.PermissionManagement.MongoDB
} }
public async Task<PermissionGrant> FindAsync( public virtual async Task<PermissionGrant> FindAsync(
string name, string name,
string providerName, string providerName,
string providerKey, string providerKey,
@ -32,7 +32,7 @@ namespace Volo.Abp.PermissionManagement.MongoDB
); );
} }
public async Task<List<PermissionGrant>> GetListAsync( public virtual async Task<List<PermissionGrant>> GetListAsync(
string providerName, string providerName,
string providerKey, string providerKey,
CancellationToken cancellationToken = default) CancellationToken cancellationToken = default)

12
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Pages/AbpPermissionManagement/PermissionManagementModal.cshtml.cs

@ -29,20 +29,20 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
public bool SelectAllInAllTabs { get; set; } public bool SelectAllInAllTabs { get; set; }
private readonly IPermissionAppService _permissionAppService; protected IPermissionAppService PermissionAppService { get; }
public PermissionManagementModal(IPermissionAppService permissionAppService) public PermissionManagementModal(IPermissionAppService permissionAppService)
{ {
ObjectMapperContext = typeof(AbpPermissionManagementWebModule); ObjectMapperContext = typeof(AbpPermissionManagementWebModule);
_permissionAppService = permissionAppService; PermissionAppService = permissionAppService;
} }
public async Task OnGetAsync() public virtual async Task OnGetAsync()
{ {
ValidateModel(); ValidateModel();
var result = await _permissionAppService.GetAsync(ProviderName, ProviderKey); var result = await PermissionAppService.GetAsync(ProviderName, ProviderKey);
EntityDisplayName = result.EntityDisplayName; EntityDisplayName = result.EntityDisplayName;
@ -64,7 +64,7 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
SelectAllInAllTabs = Groups.All(g => g.IsAllPermissionsGranted); SelectAllInAllTabs = Groups.All(g => g.IsAllPermissionsGranted);
} }
public async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
@ -77,7 +77,7 @@ namespace Volo.Abp.PermissionManagement.Web.Pages.AbpPermissionManagement
}) })
.ToArray(); .ToArray();
await _permissionAppService.UpdateAsync( await PermissionAppService.UpdateAsync(
ProviderName, ProviderName,
ProviderKey, ProviderKey,
new UpdatePermissionsDto new UpdatePermissionsDto

2
modules/permission-management/src/Volo.Abp.PermissionManagement.Web/Utils/FlatTreeDepthFinder.cs

@ -5,7 +5,7 @@ namespace Volo.Abp.PermissionManagement.Web.Utils
public class FlatTreeDepthFinder<T> public class FlatTreeDepthFinder<T>
where T : class, IFlatTreeItem where T : class, IFlatTreeItem
{ {
public void SetDepths(List<T> items) public virtual void SetDepths(List<T> items)
{ {
SetDepths(items, null, 0); SetDepths(items, null, 0);
} }

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/ConfigurationSettingManagementProvider.cs

@ -16,17 +16,17 @@ namespace Volo.Abp.SettingManagement
Configuration = configuration; Configuration = configuration;
} }
public Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey) public virtual Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey)
{ {
return Task.FromResult(Configuration[ConfigurationSettingValueProvider.ConfigurationNamePrefix + setting.Name]); return Task.FromResult(Configuration[ConfigurationSettingValueProvider.ConfigurationNamePrefix + setting.Name]);
} }
public Task SetAsync(SettingDefinition setting, string value, string providerKey) public virtual Task SetAsync(SettingDefinition setting, string value, string providerKey)
{ {
throw new AbpException($"Can not set a setting value to the application configuration."); throw new AbpException($"Can not set a setting value to the application configuration.");
} }
public Task ClearAsync(SettingDefinition setting, string providerKey) public virtual Task ClearAsync(SettingDefinition setting, string providerKey)
{ {
throw new AbpException($"Can not set a setting value to the application configuration."); throw new AbpException($"Can not set a setting value to the application configuration.");
} }

6
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/DefaultValueSettingManagementProvider.cs

@ -8,17 +8,17 @@ namespace Volo.Abp.SettingManagement
{ {
public string Name => DefaultValueSettingValueProvider.ProviderName; public string Name => DefaultValueSettingValueProvider.ProviderName;
public Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey) public virtual Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey)
{ {
return Task.FromResult(setting.DefaultValue); return Task.FromResult(setting.DefaultValue);
} }
public Task SetAsync(SettingDefinition setting, string value, string providerKey) public virtual Task SetAsync(SettingDefinition setting, string value, string providerKey)
{ {
throw new AbpException($"Can not set default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); throw new AbpException($"Can not set default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation.");
} }
public Task ClearAsync(SettingDefinition setting, string providerKey) public virtual Task ClearAsync(SettingDefinition setting, string providerKey)
{ {
throw new AbpException($"Can not clear default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation."); throw new AbpException($"Can not clear default value of a setting. It is only possible while defining the setting in a {typeof(ISettingDefinitionProvider)} implementation.");
} }

2
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementProvider.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.SettingManagement
SettingManagementStore = settingManagementStore; SettingManagementStore = settingManagementStore;
} }
public async Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey) public virtual async Task<string> GetOrNullAsync(SettingDefinition setting, string providerKey)
{ {
return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey)); return await SettingManagementStore.GetOrNullAsync(setting.Name, Name, NormalizeProviderKey(providerKey));
} }

8
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingManagementStore.cs

@ -24,13 +24,13 @@ namespace Volo.Abp.SettingManagement
Cache = cache; Cache = cache;
} }
public async Task<string> GetOrNullAsync(string name, string providerName, string providerKey) public virtual async Task<string> GetOrNullAsync(string name, string providerName, string providerKey)
{ {
var cacheItem = await GetCacheItemAsync(name, providerName, providerKey); var cacheItem = await GetCacheItemAsync(name, providerName, providerKey);
return cacheItem.Value; return cacheItem.Value;
} }
public async Task SetAsync(string name, string value, string providerName, string providerKey) public virtual async Task SetAsync(string name, string value, string providerName, string providerKey)
{ {
var setting = await SettingRepository.FindAsync(name, providerName, providerKey); var setting = await SettingRepository.FindAsync(name, providerName, providerKey);
if (setting == null) if (setting == null)
@ -45,13 +45,13 @@ namespace Volo.Abp.SettingManagement
} }
} }
public async Task<List<SettingValue>> GetListAsync(string providerName, string providerKey) public virtual async Task<List<SettingValue>> GetListAsync(string providerName, string providerKey)
{ {
var settings = await SettingRepository.GetListAsync(providerName, providerKey); var settings = await SettingRepository.GetListAsync(providerName, providerKey);
return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList(); return settings.Select(s => new SettingValue(s.Name, s.Value)).ToList();
} }
public async Task DeleteAsync(string name, string providerName, string providerKey) public virtual async Task DeleteAsync(string name, string providerName, string providerKey)
{ {
var setting = await SettingRepository.FindAsync(name, providerName, providerKey); var setting = await SettingRepository.FindAsync(name, providerName, providerKey);
if (setting != null) if (setting != null)

2
modules/setting-management/src/Volo.Abp.SettingManagement.Domain/Volo/Abp/SettingManagement/SettingStore.cs

@ -13,7 +13,7 @@ namespace Volo.Abp.SettingManagement
ManagementStore = managementStore; ManagementStore = managementStore;
} }
public Task<string> GetOrNullAsync(string name, string providerName, string providerKey) public virtual Task<string> GetOrNullAsync(string name, string providerName, string providerKey)
{ {
return ManagementStore.GetOrNullAsync(name, providerName, providerKey); return ManagementStore.GetOrNullAsync(name, providerName, providerKey);
} }

4
modules/setting-management/src/Volo.Abp.SettingManagement.EntityFrameworkCore/Volo/Abp/SettingManagement/EntityFrameworkCore/EfCoreSettingRepository.cs

@ -15,7 +15,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore
{ {
} }
public async Task<Setting> FindAsync(string name, string providerName, string providerKey) public virtual async Task<Setting> FindAsync(string name, string providerName, string providerKey)
{ {
return await DbSet return await DbSet
.FirstOrDefaultAsync( .FirstOrDefaultAsync(
@ -23,7 +23,7 @@ namespace Volo.Abp.SettingManagement.EntityFrameworkCore
); );
} }
public async Task<List<Setting>> GetListAsync(string providerName, string providerKey) public virtual async Task<List<Setting>> GetListAsync(string providerName, string providerKey)
{ {
return await DbSet return await DbSet
.Where( .Where(

4
modules/setting-management/src/Volo.Abp.SettingManagement.MongoDB/Volo/Abp/SettingManagement/MongoDB/MongoSettingRepository.cs

@ -16,12 +16,12 @@ namespace Volo.Abp.SettingManagement.MongoDB
} }
public async Task<Setting> FindAsync(string name, string providerName, string providerKey) public virtual async Task<Setting> FindAsync(string name, string providerName, string providerKey)
{ {
return await GetMongoQueryable().FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey); return await GetMongoQueryable().FirstOrDefaultAsync(s => s.Name == name && s.ProviderName == providerName && s.ProviderKey == providerKey);
} }
public async Task<List<Setting>> GetListAsync(string providerName, string providerKey) public virtual async Task<List<Setting>> GetListAsync(string providerName, string providerKey)
{ {
return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync(); return await GetMongoQueryable().Where(s => s.ProviderName == providerName && s.ProviderKey == providerKey).ToListAsync();
} }

4
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Navigation/SettingManagementMainMenuContributor.cs

@ -12,7 +12,7 @@ namespace Volo.Abp.SettingManagement.Web.Navigation
{ {
public class SettingManagementMainMenuContributor : IMenuContributor public class SettingManagementMainMenuContributor : IMenuContributor
{ {
public async Task ConfigureMenuAsync(MenuConfigurationContext context) public virtual async Task ConfigureMenuAsync(MenuConfigurationContext context)
{ {
if (context.Menu.Name != StandardMenus.Main) if (context.Menu.Name != StandardMenus.Main)
{ {
@ -43,7 +43,7 @@ namespace Volo.Abp.SettingManagement.Web.Navigation
); );
} }
private async Task<bool> CheckAnyOfPagePermissionsGranted( protected virtual async Task<bool> CheckAnyOfPagePermissionsGranted(
SettingManagementPageOptions settingManagementPageOptions, SettingManagementPageOptions settingManagementPageOptions,
SettingPageCreationContext settingPageCreationContext) SettingPageCreationContext settingPageCreationContext)
{ {

21
modules/setting-management/src/Volo.Abp.SettingManagement.Web/Pages/SettingManagement/Index.cshtml.cs

@ -9,25 +9,26 @@ namespace Volo.Abp.SettingManagement.Web.Pages.SettingManagement
{ {
public SettingPageCreationContext SettingPageCreationContext { get; private set; } public SettingPageCreationContext SettingPageCreationContext { get; private set; }
private readonly SettingManagementPageOptions _options; protected SettingManagementPageOptions Options { get; }
private readonly IServiceProvider _serviceProvider;
public IndexModel( public IndexModel(IOptions<SettingManagementPageOptions> options)
IOptions<SettingManagementPageOptions> options,
IServiceProvider serviceProvider)
{ {
_serviceProvider = serviceProvider; Options = options.Value;
_options = options.Value;
} }
public async Task OnGetAsync() public virtual async Task OnGetAsync()
{ {
SettingPageCreationContext = new SettingPageCreationContext(_serviceProvider); SettingPageCreationContext = new SettingPageCreationContext(ServiceProvider);
foreach (var contributor in _options.Contributors) foreach (var contributor in Options.Contributors)
{ {
await contributor.ConfigureAsync(SettingPageCreationContext); await contributor.ConfigureAsync(SettingPageCreationContext);
} }
} }
public virtual Task OnPostAsync()
{
return Task.CompletedTask;
}
} }
} }

2
modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs

@ -72,7 +72,7 @@ namespace Volo.Abp.TenantManagement
} }
} }
internal void SetName([NotNull] string name) protected internal virtual void SetName([NotNull] string name)
{ {
Name = Check.NotNullOrWhiteSpace(name, nameof(name), TenantConsts.MaxNameLength); Name = Check.NotNullOrWhiteSpace(name, nameof(name), TenantConsts.MaxNameLength);
} }

10
modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantManager.cs

@ -7,15 +7,15 @@ namespace Volo.Abp.TenantManagement
{ {
public class TenantManager : DomainService, ITenantManager public class TenantManager : DomainService, ITenantManager
{ {
private readonly ITenantRepository _tenantRepository; protected ITenantRepository TenantRepository { get; }
public TenantManager(ITenantRepository tenantRepository) public TenantManager(ITenantRepository tenantRepository)
{ {
_tenantRepository = tenantRepository; TenantRepository = tenantRepository;
} }
public async Task<Tenant> CreateAsync(string name) public virtual async Task<Tenant> CreateAsync(string name)
{ {
Check.NotNull(name, nameof(name)); Check.NotNull(name, nameof(name));
@ -23,7 +23,7 @@ namespace Volo.Abp.TenantManagement
return new Tenant(GuidGenerator.Create(), name); return new Tenant(GuidGenerator.Create(), name);
} }
public async Task ChangeNameAsync(Tenant tenant, string name) public virtual async Task ChangeNameAsync(Tenant tenant, string name)
{ {
Check.NotNull(tenant, nameof(tenant)); Check.NotNull(tenant, nameof(tenant));
Check.NotNull(name, nameof(name)); Check.NotNull(name, nameof(name));
@ -34,7 +34,7 @@ namespace Volo.Abp.TenantManagement
protected virtual async Task ValidateNameAsync(string name, Guid? expectedId = null) protected virtual async Task ValidateNameAsync(string name, Guid? expectedId = null)
{ {
var tenant = await _tenantRepository.FindByNameAsync(name); var tenant = await TenantRepository.FindByNameAsync(name);
if (tenant != null && tenant.Id != expectedId) if (tenant != null && tenant.Id != expectedId)
{ {
throw new UserFriendlyException("Duplicate tenancy name: " + name); //TODO: A domain exception would be better..? throw new UserFriendlyException("Duplicate tenancy name: " + name); //TODO: A domain exception would be better..?

44
modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/TenantStore.cs

@ -10,73 +10,73 @@ namespace Volo.Abp.TenantManagement
public class TenantStore : ITenantStore, ITransientDependency public class TenantStore : ITenantStore, ITransientDependency
{ {
private readonly ITenantRepository _tenantRepository; protected ITenantRepository TenantRepository { get; }
private readonly IObjectMapper<AbpTenantManagementDomainModule> _objectMapper; protected IObjectMapper<AbpTenantManagementDomainModule> ObjectMapper { get; }
private readonly ICurrentTenant _currentTenant; protected ICurrentTenant CurrentTenant { get; }
public TenantStore( public TenantStore(
ITenantRepository tenantRepository, ITenantRepository tenantRepository,
IObjectMapper<AbpTenantManagementDomainModule> objectMapper, IObjectMapper<AbpTenantManagementDomainModule> objectMapper,
ICurrentTenant currentTenant) ICurrentTenant currentTenant)
{ {
_tenantRepository = tenantRepository; TenantRepository = tenantRepository;
_objectMapper = objectMapper; ObjectMapper = objectMapper;
_currentTenant = currentTenant; CurrentTenant = currentTenant;
} }
public async Task<TenantConfiguration> FindAsync(string name) public virtual async Task<TenantConfiguration> FindAsync(string name)
{ {
using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities!
{ {
var tenant = await _tenantRepository.FindByNameAsync(name); var tenant = await TenantRepository.FindByNameAsync(name);
if (tenant == null) if (tenant == null)
{ {
return null; return null;
} }
return _objectMapper.Map<Tenant, TenantConfiguration>(tenant); return ObjectMapper.Map<Tenant, TenantConfiguration>(tenant);
} }
} }
public async Task<TenantConfiguration> FindAsync(Guid id) public virtual async Task<TenantConfiguration> FindAsync(Guid id)
{ {
using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities!
{ {
var tenant = await _tenantRepository.FindAsync(id); var tenant = await TenantRepository.FindAsync(id);
if (tenant == null) if (tenant == null)
{ {
return null; return null;
} }
return _objectMapper.Map<Tenant, TenantConfiguration>(tenant); return ObjectMapper.Map<Tenant, TenantConfiguration>(tenant);
} }
} }
public TenantConfiguration Find(string name) public virtual TenantConfiguration Find(string name)
{ {
using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities!
{ {
var tenant = _tenantRepository.FindByName(name); var tenant = TenantRepository.FindByName(name);
if (tenant == null) if (tenant == null)
{ {
return null; return null;
} }
return _objectMapper.Map<Tenant, TenantConfiguration>(tenant); return ObjectMapper.Map<Tenant, TenantConfiguration>(tenant);
} }
} }
public TenantConfiguration Find(Guid id) public virtual TenantConfiguration Find(Guid id)
{ {
using (_currentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities! using (CurrentTenant.Change(null)) //TODO: No need this if we can implement to define host side (or tenant-independent) entities!
{ {
var tenant = _tenantRepository.FindById(id); var tenant = TenantRepository.FindById(id);
if (tenant == null) if (tenant == null)
{ {
return null; return null;
} }
return _objectMapper.Map<Tenant, TenantConfiguration>(tenant); return ObjectMapper.Map<Tenant, TenantConfiguration>(tenant);
} }
} }
} }

6
modules/tenant-management/src/Volo.Abp.TenantManagement.EntityFrameworkCore/Volo/Abp/TenantManagement/EntityFrameworkCore/EfCoreTenantRepository.cs

@ -28,14 +28,14 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore
.FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken));
} }
public Tenant FindByName(string name, bool includeDetails = true) public virtual Tenant FindByName(string name, bool includeDetails = true)
{ {
return DbSet return DbSet
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
.FirstOrDefault(t => t.Name == name); .FirstOrDefault(t => t.Name == name);
} }
public Tenant FindById(Guid id, bool includeDetails = true) public virtual Tenant FindById(Guid id, bool includeDetails = true)
{ {
return DbSet return DbSet
.IncludeDetails(includeDetails) .IncludeDetails(includeDetails)
@ -62,7 +62,7 @@ namespace Volo.Abp.TenantManagement.EntityFrameworkCore
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default) public virtual async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default)
{ {
return await this return await this
.WhereIf( .WhereIf(

28
modules/tenant-management/src/Volo.Abp.TenantManagement.HttpApi/Volo/Abp/TenantManagement/TenantController.cs

@ -12,66 +12,66 @@ namespace Volo.Abp.TenantManagement
[Route("api/multi-tenancy/tenants")] [Route("api/multi-tenancy/tenants")]
public class TenantController : AbpController, ITenantAppService //TODO: Throws exception on validation if we inherit from Controller public class TenantController : AbpController, ITenantAppService //TODO: Throws exception on validation if we inherit from Controller
{ {
private readonly ITenantAppService _service; protected ITenantAppService TenantAppService { get; }
public TenantController(ITenantAppService service) public TenantController(ITenantAppService tenantAppService)
{ {
_service = service; TenantAppService = tenantAppService;
} }
[HttpGet] [HttpGet]
[Route("{id}")] [Route("{id}")]
public virtual Task<TenantDto> GetAsync(Guid id) public virtual Task<TenantDto> GetAsync(Guid id)
{ {
return _service.GetAsync(id); return TenantAppService.GetAsync(id);
} }
[HttpGet] [HttpGet]
public virtual Task<PagedResultDto<TenantDto>> GetListAsync(GetTenantsInput input) public virtual Task<PagedResultDto<TenantDto>> GetListAsync(GetTenantsInput input)
{ {
return _service.GetListAsync(input); return TenantAppService.GetListAsync(input);
} }
[HttpPost] [HttpPost]
public virtual Task<TenantDto> CreateAsync(TenantCreateDto input) public virtual Task<TenantDto> CreateAsync(TenantCreateDto input)
{ {
ValidateModel(); ValidateModel();
return _service.CreateAsync(input); return TenantAppService.CreateAsync(input);
} }
[HttpPut] [HttpPut]
[Route("{id}")] [Route("{id}")]
public virtual Task<TenantDto> UpdateAsync(Guid id, TenantUpdateDto input) public virtual Task<TenantDto> UpdateAsync(Guid id, TenantUpdateDto input)
{ {
return _service.UpdateAsync(id, input); return TenantAppService.UpdateAsync(id, input);
} }
[HttpDelete] [HttpDelete]
[Route("{id}")] [Route("{id}")]
public virtual Task DeleteAsync(Guid id) public virtual Task DeleteAsync(Guid id)
{ {
return _service.DeleteAsync(id); return TenantAppService.DeleteAsync(id);
} }
[HttpGet] [HttpGet]
[Route("{id}/default-connection-string")] [Route("{id}/default-connection-string")]
public Task<string> GetDefaultConnectionStringAsync(Guid id) public virtual Task<string> GetDefaultConnectionStringAsync(Guid id)
{ {
return _service.GetDefaultConnectionStringAsync(id); return TenantAppService.GetDefaultConnectionStringAsync(id);
} }
[HttpPut] [HttpPut]
[Route("{id}/default-connection-string")] [Route("{id}/default-connection-string")]
public Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString) public virtual Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString)
{ {
return _service.UpdateDefaultConnectionStringAsync(id, defaultConnectionString); return TenantAppService.UpdateDefaultConnectionStringAsync(id, defaultConnectionString);
} }
[HttpDelete] [HttpDelete]
[Route("{id}/default-connection-string")] [Route("{id}/default-connection-string")]
public Task DeleteDefaultConnectionStringAsync(Guid id) public virtual Task DeleteDefaultConnectionStringAsync(Guid id)
{ {
return _service.DeleteDefaultConnectionStringAsync(id); return TenantAppService.DeleteDefaultConnectionStringAsync(id);
} }
} }
} }

6
modules/tenant-management/src/Volo.Abp.TenantManagement.MongoDB/Volo/Abp/TenantManagement/MongoDb/MongoTenantRepository.cs

@ -28,13 +28,13 @@ namespace Volo.Abp.TenantManagement.MongoDB
.FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken)); .FirstOrDefaultAsync(t => t.Name == name, GetCancellationToken(cancellationToken));
} }
public Tenant FindByName(string name, bool includeDetails = true) public virtual Tenant FindByName(string name, bool includeDetails = true)
{ {
return GetMongoQueryable() return GetMongoQueryable()
.FirstOrDefault(t => t.Name == name); .FirstOrDefault(t => t.Name == name);
} }
public Tenant FindById(Guid id, bool includeDetails = true) public virtual Tenant FindById(Guid id, bool includeDetails = true)
{ {
return GetMongoQueryable() return GetMongoQueryable()
.FirstOrDefault(t => t.Id == id); .FirstOrDefault(t => t.Id == id);
@ -60,7 +60,7 @@ namespace Volo.Abp.TenantManagement.MongoDB
.ToListAsync(GetCancellationToken(cancellationToken)); .ToListAsync(GetCancellationToken(cancellationToken));
} }
public async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default) public virtual async Task<long> GetCountAsync(string filter = null, CancellationToken cancellationToken = default)
{ {
return await GetMongoQueryable() return await GetMongoQueryable()
.WhereIf<Tenant, IMongoQueryable<Tenant>>( .WhereIf<Tenant, IMongoQueryable<Tenant>>(

2
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs

@ -10,7 +10,7 @@ namespace Volo.Abp.TenantManagement.Web
CreateRoleMappings(); CreateRoleMappings();
} }
private void CreateRoleMappings() protected virtual void CreateRoleMappings()
{ {
//List //List
CreateMap<TenantDto, EditModalModel.TenantInfoModel>(); CreateMap<TenantDto, EditModalModel.TenantInfoModel>();

2
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Navigation/AbpTenantManagementWebMainMenuContributor.cs

@ -9,7 +9,7 @@ namespace Volo.Abp.TenantManagement.Web.Navigation
{ {
public class AbpTenantManagementWebMainMenuContributor : IMenuContributor public class AbpTenantManagementWebMainMenuContributor : IMenuContributor
{ {
public async Task ConfigureMenuAsync(MenuConfigurationContext context) public virtual async Task ConfigureMenuAsync(MenuConfigurationContext context)
{ {
if (context.Menu.Name != StandardMenus.Main) if (context.Menu.Name != StandardMenus.Main)
{ {

14
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs

@ -11,16 +11,16 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[BindProperty] [BindProperty]
public TenantInfoModel Tenant { get; set; } public TenantInfoModel Tenant { get; set; }
private readonly ITenantAppService _tenantAppService; protected ITenantAppService TenantAppService { get; }
public ConnectionStringsModal(ITenantAppService tenantAppService) public ConnectionStringsModal(ITenantAppService tenantAppService)
{ {
_tenantAppService = tenantAppService; TenantAppService = tenantAppService;
} }
public async Task OnGetAsync(Guid id) public virtual async Task OnGetAsync(Guid id)
{ {
var defaultConnectionString = await _tenantAppService.GetDefaultConnectionStringAsync(id); var defaultConnectionString = await TenantAppService.GetDefaultConnectionStringAsync(id);
Tenant = new TenantInfoModel Tenant = new TenantInfoModel
{ {
Id = id, Id = id,
@ -29,17 +29,17 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
}; };
} }
public async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace()) if (Tenant.UseSharedDatabase || Tenant.DefaultConnectionString.IsNullOrWhiteSpace())
{ {
await _tenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id); await TenantAppService.DeleteDefaultConnectionStringAsync(Tenant.Id);
} }
else else
{ {
await _tenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString); await TenantAppService.UpdateDefaultConnectionStringAsync(Tenant.Id, Tenant.DefaultConnectionString);
} }
return NoContent(); return NoContent();

13
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs

@ -10,19 +10,24 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[BindProperty] [BindProperty]
public TenantInfoModel Tenant { get; set; } public TenantInfoModel Tenant { get; set; }
private readonly ITenantAppService _tenantAppService; protected ITenantAppService TenantAppService { get; }
public CreateModalModel(ITenantAppService tenantAppService) public CreateModalModel(ITenantAppService tenantAppService)
{ {
_tenantAppService = tenantAppService; TenantAppService = tenantAppService;
} }
public async Task<IActionResult> OnPostAsync() public virtual Task OnGetAsync()
{
return Task.CompletedTask;
}
public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<TenantInfoModel, TenantCreateDto>(Tenant); var input = ObjectMapper.Map<TenantInfoModel, TenantCreateDto>(Tenant);
await _tenantAppService.CreateAsync(input); await TenantAppService.CreateAsync(input);
return NoContent(); return NoContent();
} }

12
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs

@ -11,26 +11,26 @@ namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
[BindProperty] [BindProperty]
public TenantInfoModel Tenant { get; set; } public TenantInfoModel Tenant { get; set; }
private readonly ITenantAppService _tenantAppService; protected ITenantAppService TenantAppService { get; }
public EditModalModel(ITenantAppService tenantAppService) public EditModalModel(ITenantAppService tenantAppService)
{ {
_tenantAppService = tenantAppService; TenantAppService = tenantAppService;
} }
public async Task OnGetAsync(Guid id) public virtual async Task OnGetAsync(Guid id)
{ {
Tenant = ObjectMapper.Map<TenantDto, TenantInfoModel>( Tenant = ObjectMapper.Map<TenantDto, TenantInfoModel>(
await _tenantAppService.GetAsync(id) await TenantAppService.GetAsync(id)
); );
} }
public async Task<IActionResult> OnPostAsync() public virtual async Task<IActionResult> OnPostAsync()
{ {
ValidateModel(); ValidateModel();
var input = ObjectMapper.Map<TenantInfoModel, TenantUpdateDto>(Tenant); var input = ObjectMapper.Map<TenantInfoModel, TenantUpdateDto>(Tenant);
await _tenantAppService.UpdateAsync(Tenant.Id, input); await TenantAppService.UpdateAsync(Tenant.Id, input);
return NoContent(); return NoContent();
} }

8
modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/Index.cshtml.cs

@ -1,12 +1,18 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages; using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants
{ {
public class IndexModel : TenantManagementPageModel public class IndexModel : TenantManagementPageModel
{ {
public void OnGet() public virtual Task OnGetAsync()
{ {
return Task.CompletedTask;
}
public virtual Task OnPostAsync()
{
return Task.CompletedTask;
} }
} }
} }
Loading…
Cancel
Save