Browse Source

Created IdentityUserLookupAppService and used in the microservice demo.

pull/786/head^2
Halil ibrahim Kalkan 8 years ago
parent
commit
31180b82d3
  1. 21
      modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs
  2. 3
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj
  3. 15
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/AbpIdentityApplicationContractsModule.cs
  4. 14
      modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IIdentityUserLookupAppService.cs
  5. 41
      modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserLookupAppService.cs
  6. 4
      modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs
  7. 3
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj
  8. 2
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/AbpIdentityHttpApiClientModule.cs
  9. 14
      modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientIdentityUserLookupService.cs
  10. 36
      modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs
  11. 13
      modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserData.cs
  12. 2
      samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs
  13. BIN
      samples/MicroserviceDemo/databases/MsDemo_Identity.zip

21
modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs

@ -60,20 +60,19 @@ namespace Volo.Blogging.Posts
{ {
if (postDto.CreatorId.HasValue) if (postDto.CreatorId.HasValue)
{ {
var creatorUser = await UserLookupService.FindByIdAsync(postDto.CreatorId.Value); if (!userDictionary.ContainsKey(postDto.CreatorId.Value))
if (creatorUser != null && !userDictionary.ContainsKey(creatorUser.Id))
{ {
userDictionary.Add(creatorUser.Id, ObjectMapper.Map<BlogUser, BlogUserDto>(creatorUser)); var creatorUser = await UserLookupService.FindByIdAsync(postDto.CreatorId.Value);
if (creatorUser != null)
{
userDictionary[creatorUser.Id] = ObjectMapper.Map<BlogUser, BlogUserDto>(creatorUser);
}
} }
}
}
foreach (var postDto in postDtos) if (userDictionary.ContainsKey(postDto.CreatorId.Value))
{ {
if (postDto.CreatorId.HasValue && userDictionary.ContainsKey((Guid)postDto.CreatorId)) postDto.Writer = userDictionary[(Guid)postDto.CreatorId];
{ }
postDto.Writer = userDictionary[(Guid)postDto.CreatorId];
} }
} }

3
modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo.Abp.Identity.Application.Contracts.csproj

@ -19,9 +19,8 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" /> <ProjectReference Include="..\Volo.Abp.Identity.Domain.Shared\Volo.Abp.Identity.Domain.Shared.csproj" />
<ProjectReference Include="..\..\..\permission-management\src\Volo.Abp.PermissionManagement.Application.Contracts\Volo.Abp.PermissionManagement.Application.Contracts.csproj" /> <ProjectReference Include="..\..\..\permission-management\src\Volo.Abp.PermissionManagement.Application.Contracts\Volo.Abp.PermissionManagement.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\users\src\Volo.Abp.Users.Abstractions\Volo.Abp.Users.Abstractions.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Authorization\Volo.Abp.Authorization.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application\Volo.Abp.Ddd.Application.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application\Volo.Abp.Ddd.Application.csproj" />
</ItemGroup> </ItemGroup>

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

@ -1,19 +1,22 @@
using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Application;
using Volo.Abp.Application;
using Volo.Abp.Authorization; using Volo.Abp.Authorization;
using Volo.Abp.Authorization.Permissions; using Volo.Abp.Authorization.Permissions;
using Volo.Abp.Identity.Localization; using Volo.Abp.Identity.Localization;
using Volo.Abp.Localization; using Volo.Abp.Localization;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.PermissionManagement; using Volo.Abp.PermissionManagement;
using Volo.Abp.Users;
using Volo.Abp.VirtualFileSystem; using Volo.Abp.VirtualFileSystem;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
[DependsOn(typeof(AbpIdentityDomainSharedModule))] [DependsOn(
[DependsOn(typeof(AbpAuthorizationModule))] typeof(AbpIdentityDomainSharedModule),
[DependsOn(typeof(AbpDddApplicationModule))] typeof(AbpUsersAbstractionModule),
[DependsOn(typeof(AbpPermissionManagementApplicationContractsModule))] typeof(AbpAuthorizationModule),
typeof(AbpDddApplicationModule),
typeof(AbpPermissionManagementApplicationContractsModule)
)]
public class AbpIdentityApplicationContractsModule : AbpModule public class AbpIdentityApplicationContractsModule : AbpModule
{ {
public override void ConfigureServices(ServiceConfigurationContext context) public override void ConfigureServices(ServiceConfigurationContext context)

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

@ -0,0 +1,14 @@
using System;
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
{
public interface IIdentityUserLookupAppService : IApplicationService
{
Task<UserData> FindByIdAsync(Guid id);
Task<UserData> FindByUserNameAsync(string userName);
}
}

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

@ -0,0 +1,41 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
{
//TODO: Authorization (for clients, not users)
public class IdentityUserLookupAppService : IdentityAppServiceBase, IIdentityUserLookupAppService
{
protected IdentityUserRepositoryExternalUserLookupServiceProvider UserLookupServiceProvider { get; }
public IdentityUserLookupAppService(
IdentityUserRepositoryExternalUserLookupServiceProvider userLookupServiceProvider)
{
UserLookupServiceProvider = userLookupServiceProvider;
}
public virtual async Task<UserData> FindByIdAsync(Guid id)
{
var userData = await UserLookupServiceProvider.FindByIdAsync(id);
if (userData == null)
{
return null;
}
return new UserData(userData);
}
public virtual async Task<UserData> FindByUserNameAsync(string userName)
{
var userData = await UserLookupServiceProvider.FindByUserNameAsync(userName);
if (userData == null)
{
return null;
}
return new UserData(userData);
}
}
}

4
modules/identity/src/Volo.Abp.Identity.Domain/Volo/Abp/Identity/IdentityUserRepositoryExternalUserLookupServiceProvider.cs

@ -30,7 +30,7 @@ namespace Volo.Abp.Identity
includeDetails: false, includeDetails: false,
cancellationToken: cancellationToken cancellationToken: cancellationToken
) )
).ToAbpUserData(); )?.ToAbpUserData();
} }
public async Task<IUserData> FindByUserNameAsync( public async Task<IUserData> FindByUserNameAsync(
@ -43,7 +43,7 @@ namespace Volo.Abp.Identity
includeDetails: false, includeDetails: false,
cancellationToken: cancellationToken cancellationToken: cancellationToken
) )
).ToAbpUserData(); )?.ToAbpUserData();
} }
} }
} }

3
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo.Abp.Identity.HttpApi.Client.csproj

@ -15,9 +15,6 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\Volo.Abp.Identity.Application.Contracts\Volo.Abp.Identity.Application.Contracts.csproj" /> <ProjectReference Include="..\Volo.Abp.Identity.Application.Contracts\Volo.Abp.Identity.Application.Contracts.csproj" />
<ProjectReference Include="..\..\..\users\src\Volo.Abp.Users.Abstractions\Volo.Abp.Users.Abstractions.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Http.Client\Volo.Abp.Http.Client.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Http.Client\Volo.Abp.Http.Client.csproj" />
</ItemGroup> </ItemGroup>

2
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/AbpIdentityHttpApiClientModule.cs

@ -1,13 +1,11 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Http.Client; using Volo.Abp.Http.Client;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.Users;
namespace Volo.Abp.Identity namespace Volo.Abp.Identity
{ {
[DependsOn( [DependsOn(
typeof(AbpIdentityApplicationContractsModule), typeof(AbpIdentityApplicationContractsModule),
typeof(AbpUsersAbstractionModule),
typeof(AbpHttpClientModule))] typeof(AbpHttpClientModule))]
public class AbpIdentityHttpApiClientModule : AbpModule public class AbpIdentityHttpApiClientModule : AbpModule
{ {

14
modules/identity/src/Volo.Abp.Identity.HttpApi.Client/Volo/Abp/Identity/HttpClientIdentityUserLookupService.cs

@ -1,5 +1,4 @@
using System; using System;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
@ -10,24 +9,21 @@ namespace Volo.Abp.Identity
[Dependency(TryRegister = true)] [Dependency(TryRegister = true)]
public class HttpClientExternalUserLookupServiceProvider : IExternalUserLookupServiceProvider, ITransientDependency public class HttpClientExternalUserLookupServiceProvider : IExternalUserLookupServiceProvider, ITransientDependency
{ {
private readonly IIdentityUserAppService _userAppService; private readonly IIdentityUserLookupAppService _userLookupAppService;
public HttpClientExternalUserLookupServiceProvider(IIdentityUserAppService userAppService) public HttpClientExternalUserLookupServiceProvider(IIdentityUserLookupAppService userLookupAppService)
{ {
_userAppService = userAppService; _userLookupAppService = userLookupAppService;
} }
public async Task<IUserData> FindByIdAsync(Guid id, CancellationToken cancellationToken = default) public async Task<IUserData> FindByIdAsync(Guid id, CancellationToken cancellationToken = default)
{ {
//TODO: Should return null if not found! return await _userLookupAppService.FindByIdAsync(id);
return (await _userAppService.GetAsync(id)).ToUserInfo();
} }
public async Task<IUserData> FindByUserNameAsync(string userName, CancellationToken cancellationToken = default) public async Task<IUserData> FindByUserNameAsync(string userName, CancellationToken cancellationToken = default)
{ {
//TODO: Should return null if not found! return await _userLookupAppService.FindByUserNameAsync(userName);
//TODO: Search by UserName, not by a general filter!
return (await _userAppService.GetListAsync(new GetIdentityUsersInput { Filter = userName })).Items.FirstOrDefault()?.ToUserInfo();
} }
} }
} }

36
modules/identity/src/Volo.Abp.Identity.HttpApi/Volo/Abp/Identity/IdentityUserLookupController.cs

@ -0,0 +1,36 @@
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Users;
namespace Volo.Abp.Identity
{
[RemoteService]
[Area("identity")]
[ControllerName("UserLookup")]
[Route("api/identity/user-lookup")]
public class IdentityUserLookupController : AbpController, IIdentityUserLookupAppService
{
protected IIdentityUserLookupAppService LookupAppService { get; }
public IdentityUserLookupController(IIdentityUserLookupAppService lookupAppService)
{
LookupAppService = lookupAppService;
}
[HttpGet]
[Route("{id}")]
public Task<UserData> FindByIdAsync(Guid id)
{
return LookupAppService.FindByIdAsync(id);
}
[HttpGet]
[Route("by-username/{userName}")]
public Task<UserData> FindByUserNameAsync(string userName)
{
return LookupAppService.FindByUserNameAsync(userName);
}
}
}

13
modules/users/src/Volo.Abp.Users.Abstractions/Volo/Abp/Users/UserData.cs

@ -28,6 +28,19 @@ namespace Volo.Abp.Users
} }
public UserData(IUserData userData)
{
Id = userData.Id;
UserName = userData.UserName;
Email = userData.Email;
Name = userData.Name;
Surname = userData.Surname;
EmailConfirmed = userData.EmailConfirmed;
PhoneNumber = userData.PhoneNumber;
PhoneNumberConfirmed = userData.PhoneNumberConfirmed;
TenantId = userData.TenantId;
}
public UserData( public UserData(
Guid id, Guid id,
[NotNull] string userName, [NotNull] string userName,

2
samples/MicroserviceDemo/applications/PublicWebSite.Host/PublicWebSiteHostModule.cs

@ -66,8 +66,10 @@ namespace PublicWebSite.Host
options.Scope.Add("email"); options.Scope.Add("email");
options.Scope.Add("phone"); options.Scope.Add("phone");
options.Scope.Add("PublicWebSiteGateway"); options.Scope.Add("PublicWebSiteGateway");
options.Scope.Add("InternalGateway");
options.Scope.Add("ProductService"); options.Scope.Add("ProductService");
options.Scope.Add("BloggingService"); options.Scope.Add("BloggingService");
options.Scope.Add("IdentityService");
options.ClaimActions.MapAbpClaimTypes(); options.ClaimActions.MapAbpClaimTypes();
}); });

BIN
samples/MicroserviceDemo/databases/MsDemo_Identity.zip

Binary file not shown.
Loading…
Cancel
Save