using Abp.Dependency;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
using Abp.Events.Bus.Entities;
using Abp.Events.Bus.Handlers;
using VberZero.BaseSystem.Organizations;
using VberZero.BaseSystem.Roles;
namespace VberZero.Organizations;
///
/// 删除角色时从所有组织单位中删除角色。
///
public class OrganizationUnitRoleRemover :
IEventHandler>,
ITransientDependency
{
private readonly IRepository _organizationUniRoleRepository;
private readonly IUnitOfWorkManager _unitOfWorkManager;
public OrganizationUnitRoleRemover(
IRepository organizationUniRoleRepository,
IUnitOfWorkManager unitOfWorkManager)
{
_organizationUniRoleRepository = organizationUniRoleRepository;
_unitOfWorkManager = unitOfWorkManager;
}
public virtual void HandleEvent(EntityDeletedEventData eventData)
{
_unitOfWorkManager.WithUnitOfWork(() =>
{
using (_unitOfWorkManager.Current.SetTenantId(eventData.Entity.TenantId))
{
_organizationUniRoleRepository.Delete(
uou => uou.RoleId == eventData.Entity.Id
);
}
});
}
}