VzUserClaimsPrincipalFactory.cs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. using Abp.Dependency;
  2. using Abp.Domain.Uow;
  3. using Abp.Runtime.Security;
  4. using Microsoft.AspNetCore.Identity;
  5. using Microsoft.Extensions.Options;
  6. using System.Security.Claims;
  7. using VberZero.Authorization.Roles;
  8. using VberZero.Authorization.Users;
  9. using VberZero.BaseSystem.Roles;
  10. using VberZero.BaseSystem.Users;
  11. using VberZero.Tools.StringModel;
  12. namespace VberZero.Authorization;
  13. public class VzUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<User, Role>, ITransientDependency
  14. {
  15. private readonly IUnitOfWorkManager _unitOfWorkManager;
  16. public VzUserClaimsPrincipalFactory(
  17. VzUserManager userManager,
  18. VzRoleManager roleManager,
  19. IOptions<IdentityOptions> optionsAccessor,
  20. IUnitOfWorkManager unitOfWorkManager) : base(userManager, roleManager, optionsAccessor)
  21. {
  22. _unitOfWorkManager = unitOfWorkManager;
  23. }
  24. [UnitOfWork]
  25. protected override Task<ClaimsIdentity> GenerateClaimsAsync(User user)
  26. {
  27. var claims = new List<Claim>
  28. {
  29. new Claim(VzClaimTypes.UserId, user.Id + ""),
  30. new Claim(VzClaimTypes.RealName, user.FullName),
  31. new Claim(VzClaimTypes.UserName, user.UserName),
  32. new Claim(VzClaimTypes.UserType, user.UserType.ToStr()),
  33. new Claim(VzClaimTypes.AccountType, user.AccountType.ToStr()),
  34. new Claim(VzClaimTypes.AccountNo, user.AccountNo ?? ""),
  35. };
  36. var claimsIdentity = new ClaimsIdentity(claims, IdentityConstants.ApplicationScheme);
  37. return Task.FromResult(claimsIdentity);
  38. }
  39. public override async Task<ClaimsPrincipal> CreateAsync(User user)
  40. {
  41. return await _unitOfWorkManager.WithUnitOfWorkAsync(async () =>
  42. {
  43. var principal = await base.CreateAsync(user);
  44. if (user.TenantId.HasValue)
  45. {
  46. principal.Identities.First().AddClaim(new Claim(AbpClaimTypes.TenantId, user.TenantId.ToString() ?? string.Empty));
  47. }
  48. return principal;
  49. });
  50. }
  51. }