using Abp.Dependency; using Abp.Domain.Uow; using Abp.Runtime.Security; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Options; using System.Security.Claims; using VberZero.Authorization.Roles; using VberZero.Authorization.Users; using VberZero.BaseSystem.Roles; using VberZero.BaseSystem.Users; using VberZero.Tools.StringModel; namespace VberZero.Authorization; public class VzUserClaimsPrincipalFactory : UserClaimsPrincipalFactory, ITransientDependency { private readonly IUnitOfWorkManager _unitOfWorkManager; public VzUserClaimsPrincipalFactory( VzUserManager userManager, VzRoleManager roleManager, IOptions optionsAccessor, IUnitOfWorkManager unitOfWorkManager) : base(userManager, roleManager, optionsAccessor) { _unitOfWorkManager = unitOfWorkManager; } [UnitOfWork] protected override Task GenerateClaimsAsync(User user) { var claims = new List { new Claim(VzClaimTypes.UserId, user.Id + ""), new Claim(VzClaimTypes.RealName, user.FullName), new Claim(VzClaimTypes.UserName, user.UserName), new Claim(VzClaimTypes.UserType, user.UserType.ToStr()), new Claim(VzClaimTypes.AccountType, user.AccountType.ToStr()), new Claim(VzClaimTypes.AccountNo, user.AccountNo ?? ""), }; var claimsIdentity = new ClaimsIdentity(claims, IdentityConstants.ApplicationScheme); return Task.FromResult(claimsIdentity); } public override async Task CreateAsync(User user) { return await _unitOfWorkManager.WithUnitOfWorkAsync(async () => { var principal = await base.CreateAsync(user); if (user.TenantId.HasValue) { principal.Identities.First().AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString() ?? string.Empty)); } return principal; }); } }