feat: 完成微信小程序账户应用服务
This commit is contained in:
@@ -7,8 +7,10 @@ using SqlSugar;
|
||||
using Volo.Abp;
|
||||
using Volo.Abp.Application.Dtos;
|
||||
using Volo.Abp.Domain.Repositories;
|
||||
using Volo.Abp.Users;
|
||||
using Yi.Framework.Ddd.Application;
|
||||
using Yi.Framework.Rbac.Application.Contracts.Dtos.Account;
|
||||
using Yi.Framework.Rbac.Application.Contracts.IServices;
|
||||
using Yi.Framework.Rbac.Domain.Authorization;
|
||||
using Yi.Framework.Rbac.Domain.Managers;
|
||||
using Yi.Framework.SqlSugarCore.Abstractions;
|
||||
@@ -18,13 +20,17 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
/// <summary>
|
||||
/// 第三方授权服务
|
||||
/// </summary>
|
||||
public class AuthService : YiCrudAppService<AuthAggregateRoot, AuthOutputDto, Guid, AuthGetListInput>
|
||||
public class AuthService :
|
||||
YiCrudAppService<AuthAggregateRoot, AuthOutputDto, Guid, AuthGetListInput, AuthCreateOrUpdateInputDto>,
|
||||
IAuthService
|
||||
{
|
||||
private HttpContext HttpContext { get; set; }
|
||||
private ILogger<AuthService> _logger;
|
||||
private ISqlSugarRepository<AuthAggregateRoot, Guid> _repository;
|
||||
private IAccountManager _accountManager;
|
||||
public AuthService(IAccountManager accountManager, IHttpContextAccessor httpContextAccessor, ILogger<AuthService> logger, ISqlSugarRepository<AuthAggregateRoot, Guid> repository) : base(repository)
|
||||
|
||||
public AuthService(IAccountManager accountManager, IHttpContextAccessor httpContextAccessor,
|
||||
ILogger<AuthService> logger, ISqlSugarRepository<AuthAggregateRoot, Guid> repository) : base(repository)
|
||||
{
|
||||
_logger = logger;
|
||||
HttpContext = httpContextAccessor.HttpContext ?? throw new ApplicationException("未注册Http");
|
||||
@@ -49,8 +55,9 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
{
|
||||
throw new UserFriendlyException("第三方登录失败,请先注册后,在个人中心进行绑定该第三方后使用");
|
||||
}
|
||||
|
||||
var accessToken = await _accountManager.GetTokenByUserIdAsync(authEntity.UserId);
|
||||
return new { token= accessToken };
|
||||
return new { token = accessToken };
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -71,6 +78,7 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
{
|
||||
throw new UserFriendlyException("绑定失败,该第三方账号已被注册");
|
||||
}
|
||||
|
||||
var authAggregateRoot = new AuthAggregateRoot(scheme, userId ?? Guid.Empty, openId, name);
|
||||
|
||||
await _repository.InsertAsync(authAggregateRoot);
|
||||
@@ -84,6 +92,7 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
{
|
||||
throw new UserFriendlyException(authenticateResult.Failure.Message);
|
||||
}
|
||||
|
||||
var openidClaim = authenticateResult.Principal.Claims.Where(x => x.Type == "urn:openid").FirstOrDefault();
|
||||
var nameClaim = authenticateResult.Principal.Claims.Where(x => x.Type == "urn:name").FirstOrDefault();
|
||||
return (openidClaim.Value, nameClaim.Value);
|
||||
@@ -104,21 +113,31 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
return (await GetListAsync(input)).Items;
|
||||
}
|
||||
|
||||
public async Task<AuthOutputDto?> TryGetByOpenIdAsync(string openId, string authType)
|
||||
{
|
||||
var entity = await _repository._DbQueryable.Where(x => x.OpenId == openId)
|
||||
.Where(x => x.AuthType == authType)
|
||||
.FirstAsync();
|
||||
var output = await MapToGetOutputDtoAsync(entity);
|
||||
return output;
|
||||
}
|
||||
|
||||
public override async Task<PagedResultDto<AuthOutputDto>> GetListAsync(AuthGetListInput input)
|
||||
{
|
||||
RefAsync<int> total = 0;
|
||||
|
||||
var entities = await _repository._DbQueryable.WhereIF(input.UserId is not null, x => x.UserId == input.UserId)
|
||||
.WhereIF(!string.IsNullOrEmpty(input.AuthType), x => x.AuthType == input.AuthType)
|
||||
.WhereIF(!string.IsNullOrEmpty(input.OpenId), x => x.OpenId == input.OpenId)
|
||||
.WhereIF(input.StartTime is not null && input.EndTime is not null, x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)
|
||||
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||
var entities = await _repository._DbQueryable
|
||||
.WhereIF(input.UserId is not null, x => x.UserId == input.UserId)
|
||||
.WhereIF(!string.IsNullOrEmpty(input.AuthType), x => x.AuthType == input.AuthType)
|
||||
.WhereIF(!string.IsNullOrEmpty(input.OpenId), x => x.OpenId == input.OpenId)
|
||||
.WhereIF(input.StartTime is not null && input.EndTime is not null,
|
||||
x => x.CreationTime >= input.StartTime && x.CreationTime <= input.EndTime)
|
||||
.ToPageListAsync(input.SkipCount, input.MaxResultCount, total);
|
||||
return new PagedResultDto<AuthOutputDto>(total, await MapToGetListOutputDtosAsync(entities));
|
||||
}
|
||||
|
||||
[RemoteService(IsEnabled = false)]
|
||||
public override Task<AuthOutputDto> UpdateAsync(Guid id, AuthOutputDto input)
|
||||
public override Task<AuthOutputDto> UpdateAsync(Guid id, AuthCreateOrUpdateInputDto input)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
@@ -135,9 +154,23 @@ namespace Yi.Framework.Rbac.Application.Services.Authentication
|
||||
}
|
||||
|
||||
[RemoteService(IsEnabled = false)]
|
||||
public override Task<AuthOutputDto> CreateAsync(AuthOutputDto input)
|
||||
public override async Task<AuthOutputDto> CreateAsync(AuthCreateOrUpdateInputDto input)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
var entity = await MapToEntityAsync(input);
|
||||
await _repository.InsertAsync(entity);
|
||||
return MapToGetOutputDto(entity);
|
||||
}
|
||||
|
||||
protected override async Task CheckCreateInputDtoAsync(AuthCreateOrUpdateInputDto input)
|
||||
{
|
||||
//同一个类型,一个用户只能绑定一个第三方授权
|
||||
var isAny = await _repository._DbQueryable.Where(x => x.AuthType == input.AuthType)
|
||||
.Where(x => x.OpenId == input.OpenId || x.UserId == input.UserId).AnyAsync();
|
||||
|
||||
if (isAny)
|
||||
{
|
||||
throw new UserFriendlyException("该用户已有此应用授权");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user