using Abp.Dependency; using Abp.Domain.Repositories; using Abp.Domain.Uow; using Abp.Events.Bus.Entities; using Abp.Events.Bus.Handlers; using Abp.Runtime.Caching; using VberZero.BaseSystem.Organizations; using VberZero.BaseSystem.Users; using VberZero.Caching; namespace VberZero.Authorization.Users; public class VzUserPermissionCacheItemInvalidator : IEventHandler>, IEventHandler>, IEventHandler>, IEventHandler>, IEventHandler>, ITransientDependency { private readonly ICacheManager _cacheManager; private readonly IRepository _userOrganizationUnitRepository; private readonly IUnitOfWorkManager _unitOfWorkManager; public VzUserPermissionCacheItemInvalidator( ICacheManager cacheManager, IRepository userOrganizationUnitRepository, IUnitOfWorkManager unitOfWorkManager) { _cacheManager = cacheManager; _userOrganizationUnitRepository = userOrganizationUnitRepository; _unitOfWorkManager = unitOfWorkManager; } public void HandleEvent(EntityChangedEventData eventData) { var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0); _cacheManager.GetUserPermissionCache().Remove(cacheKey); } public void HandleEvent(EntityChangedEventData eventData) { var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0); _cacheManager.GetUserPermissionCache().Remove(cacheKey); } public void HandleEvent(EntityChangedEventData eventData) { var cacheKey = eventData.Entity.UserId + "@" + (eventData.Entity.TenantId ?? 0); _cacheManager.GetUserPermissionCache().Remove(cacheKey); } public void HandleEvent(EntityDeletedEventData eventData) { var cacheKey = eventData.Entity.Id + "@" + (eventData.Entity.TenantId ?? 0); _cacheManager.GetUserPermissionCache().Remove(cacheKey); } public virtual void HandleEvent(EntityChangedEventData eventData) { _unitOfWorkManager.WithUnitOfWork(() => { using (_unitOfWorkManager.Current.SetTenantId(eventData.Entity.TenantId)) { var users = _userOrganizationUnitRepository.GetAllList(userOu => userOu.OrganizationUnitId == eventData.Entity.OrganizationUnitId ); foreach (var userOrganizationUnit in users) { var cacheKey = userOrganizationUnit.UserId + "@" + (eventData.Entity.TenantId ?? 0); _cacheManager.GetUserPermissionCache().Remove(cacheKey); } } }); } }