VzUserPermissionCacheItemInvalidator.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. using Abp.Runtime.Caching;
  7. using VberZero.BaseSystem.Organizations;
  8. using VberZero.BaseSystem.Users;
  9. using VberZero.Caching;
  10. namespace VberZero.Authorization.Users;
  11. public class VzUserPermissionCacheItemInvalidator :
  12. IEventHandler<EntityChangedEventData<UserPermissionSetting>>,
  13. IEventHandler<EntityChangedEventData<UserRole>>,
  14. IEventHandler<EntityChangedEventData<UserOrganizationUnit>>,
  15. IEventHandler<EntityDeletedEventData<User>>,
  16. IEventHandler<EntityChangedEventData<OrganizationUnitRole>>,
  17. ITransientDependency
  18. {
  19. private readonly ICacheManager _cacheManager;
  20. private readonly IRepository<UserOrganizationUnit, long> _userOrganizationUnitRepository;
  21. private readonly IUnitOfWorkManager _unitOfWorkManager;
  22. public VzUserPermissionCacheItemInvalidator(
  23. ICacheManager cacheManager,
  24. IRepository<UserOrganizationUnit, long> userOrganizationUnitRepository,
  25. IUnitOfWorkManager unitOfWorkManager)
  26. {
  27. _cacheManager = cacheManager;
  28. _userOrganizationUnitRepository = userOrganizationUnitRepository;
  29. _unitOfWorkManager = unitOfWorkManager;
  30. }
  31. public void HandleEvent(EntityChangedEventData<UserPermissionSetting> eventData)
  32. {
  33. var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0);
  34. _cacheManager.GetUserPermissionCache().Remove(cacheKey);
  35. }
  36. public void HandleEvent(EntityChangedEventData<UserRole> eventData)
  37. {
  38. var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0);
  39. _cacheManager.GetUserPermissionCache().Remove(cacheKey);
  40. }
  41. public void HandleEvent(EntityChangedEventData<UserOrganizationUnit> eventData)
  42. {
  43. var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0);
  44. _cacheManager.GetUserPermissionCache().Remove(cacheKey);
  45. }
  46. public void HandleEvent(EntityDeletedEventData<User> eventData)
  47. {
  48. var cacheKey = eventData.Entity.Id + "@" + (eventData.Entity.TenantId ?? 0);
  49. _cacheManager.GetUserPermissionCache().Remove(cacheKey);
  50. }
  51. public virtual void HandleEvent(EntityChangedEventData<OrganizationUnitRole> eventData)
  52. {
  53. _unitOfWorkManager.WithUnitOfWork(() =>
  54. {
  55. using (_unitOfWorkManager.Current.SetTenantId(eventData.Entity.TenantId))
  56. {
  57. var users = _userOrganizationUnitRepository.GetAllList(userOu =>
  58. userOu.OrganizationUnitId == eventData.Entity.OrganizationUnitId
  59. );
  60. foreach (var userOrganizationUnit in users)
  61. {
  62. var cacheKey = userOrganizationUnit.UserId + "@" + (eventData.Entity.TenantId ?? 0);
  63. _cacheManager.GetUserPermissionCache().Remove(cacheKey);
  64. }
  65. }
  66. });
  67. }
  68. }