UserAccountSynchronizer.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. using Abp.Dependency;
  2. using Abp.Domain.Repositories;
  3. using Abp.Domain.Uow;
  4. using Abp.Events.Bus.Entities;
  5. using Abp.Events.Bus.Handlers;
  6. namespace IwbZero.Authorization.Base.Users
  7. {
  8. /// <summary>
  9. /// Synchronizes a user's information to user account.
  10. /// </summary>
  11. public class UserAccountSynchronizer :
  12. IEventHandler<EntityCreatedEventData<UserBase>>,
  13. IEventHandler<EntityDeletedEventData<UserBase>>,
  14. IEventHandler<EntityUpdatedEventData<UserBase>>,
  15. ITransientDependency
  16. {
  17. private readonly IRepository<UserAccount, long> _userAccountRepository;
  18. private readonly IUnitOfWorkManager _unitOfWorkManager;
  19. /// <summary>
  20. /// Constructor
  21. /// </summary>
  22. public UserAccountSynchronizer(
  23. IRepository<UserAccount, long> userAccountRepository,
  24. IUnitOfWorkManager unitOfWorkManager)
  25. {
  26. _userAccountRepository = userAccountRepository;
  27. _unitOfWorkManager = unitOfWorkManager;
  28. }
  29. /// <summary>
  30. /// Handles creation event of user
  31. /// </summary>
  32. [UnitOfWork]
  33. public virtual void HandleEvent(EntityCreatedEventData<UserBase> eventData)
  34. {
  35. using (_unitOfWorkManager.Current.SetTenantId(null))
  36. {
  37. _userAccountRepository.Insert(new UserAccount
  38. {
  39. TenantId = eventData.Entity.TenantId,
  40. UserName = eventData.Entity.UserName,
  41. UserId = eventData.Entity.Id,
  42. EmailAddress = eventData.Entity.EmailAddress
  43. });
  44. }
  45. }
  46. /// <summary>
  47. /// Handles deletion event of user
  48. /// </summary>
  49. /// <param name="eventData"></param>
  50. [UnitOfWork]
  51. public virtual void HandleEvent(EntityDeletedEventData<UserBase> eventData)
  52. {
  53. using (_unitOfWorkManager.Current.SetTenantId(null))
  54. {
  55. var userAccount =
  56. _userAccountRepository.FirstOrDefault(
  57. ua => ua.TenantId == eventData.Entity.TenantId && ua.UserId == eventData.Entity.Id);
  58. if (userAccount != null)
  59. {
  60. _userAccountRepository.Delete(userAccount);
  61. }
  62. }
  63. }
  64. /// <summary>
  65. /// Handles update event of user
  66. /// </summary>
  67. /// <param name="eventData"></param>
  68. [UnitOfWork]
  69. public virtual void HandleEvent(EntityUpdatedEventData<UserBase> eventData)
  70. {
  71. using (_unitOfWorkManager.Current.SetTenantId(null))
  72. {
  73. var userAccount = _userAccountRepository.FirstOrDefault(ua => ua.TenantId == eventData.Entity.TenantId && ua.UserId == eventData.Entity.Id);
  74. if (userAccount != null)
  75. {
  76. userAccount.UserName = eventData.Entity.UserName;
  77. userAccount.EmailAddress = eventData.Entity.EmailAddress;
  78. _userAccountRepository.Update(userAccount);
  79. }
  80. }
  81. }
  82. }
  83. }