75 lines
2.3 KiB
C#
75 lines
2.3 KiB
C#
using IdentityServer4.Extensions;
|
|
using IdentityServer4.Models;
|
|
using IdentityServer4.Services;
|
|
using IRaCIS.Core.Domain.Models;
|
|
using IRaCIS.Core.Infra.EFCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Security.Claims;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace IRaCIS.Core.IdentityServer4.Account
|
|
{
|
|
public class AdminProfileService : IProfileService
|
|
{
|
|
private readonly ILogger _logger;
|
|
private readonly IRepository<User> _userRepository;
|
|
|
|
public AdminProfileService(
|
|
ILogger<AdminProfileService> logger,
|
|
IRepository<User> userRepository
|
|
)
|
|
{
|
|
_logger = logger;
|
|
_userRepository = userRepository;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获得用户信息
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
public virtual Task GetProfileDataAsync(ProfileDataRequestContext context)
|
|
{
|
|
var sub = context.Subject?.GetSubjectId();
|
|
if (sub == null) throw new Exception("用户Id为空");
|
|
|
|
var user = _userRepository.Where(t=>t.Id==Guid.Parse(sub)).FirstOrDefault();
|
|
if (user == null)
|
|
{
|
|
_logger?.LogWarning("用户{0}不存在", sub);
|
|
}
|
|
else
|
|
{
|
|
var claims = new List<Claim>()
|
|
{
|
|
new Claim(ClaimAttributes.UserName, user.UserName ?? ""),
|
|
};
|
|
|
|
|
|
context.IssuedClaims = claims;
|
|
}
|
|
return Task.CompletedTask;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 验证用户是否有效
|
|
/// </summary>
|
|
/// <param name="context"></param>
|
|
/// <returns></returns>
|
|
public virtual Task IsActiveAsync(IsActiveContext context)
|
|
{
|
|
_logger.LogDebug("用户是否有效:{caller}", context.Caller);
|
|
|
|
var sub = context.Subject?.GetSubjectId();
|
|
if (sub == null) throw new Exception("用户Id为空");
|
|
|
|
var user = _userRepository.Where(t => t.Id == Guid.Parse(sub)).FirstOrDefault();
|
|
context.IsActive = user?.Status == 0;
|
|
|
|
return Task.CompletedTask;
|
|
}
|
|
}
|
|
} |