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 _userRepository; public AdminProfileService( ILogger logger, IRepository userRepository ) { _logger = logger; _userRepository = userRepository; } /// /// 获得用户信息 /// /// /// 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() { new Claim(ClaimAttributes.UserName, user.UserName ?? ""), }; context.IssuedClaims = claims; } return Task.CompletedTask; } /// /// 验证用户是否有效 /// /// /// 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; } } }