/// <summary> /// 删除实体角色信息 /// </summary> /// <param name="ids">要删除的实体角色信息编号</param> /// <returns>业务操作结果</returns> public virtual async Task <OperationResult> DeleteEntityRoles(params Guid[] ids) { DataAuthCacheRefreshEventData eventData = new DataAuthCacheRefreshEventData(); OperationResult result = await _entityRoleRepository.DeleteAsync(ids, async entity => { TRole role = await _roleRepository.GetAsync(entity.RoleId); TEntityInfo entityInfo = await _entityInfoRepository.GetAsync(entity.EntityId); if (role != null && entityInfo != null) { eventData.RemoveItems.Add(new DataAuthCacheItem() { RoleName = role.Name, EntityTypeFullName = entityInfo.TypeName, Operation = entity.Operation }); } }); if (result.Succeeded && eventData.HasData()) { //移除数据权限缓存 await _eventBus.PublishAsync(eventData); } return(result); }
/// <summary> /// 更新实体角色信息 /// </summary> /// <param name="dtos">包含更新信息的实体角色信息DTO信息</param> /// <returns>业务操作结果</returns> public virtual async Task <OperationResult> UpdateEntityRoles(params TEntityRoleInputDto[] dtos) { Check.Validate <TEntityRoleInputDto, Guid>(dtos, nameof(dtos)); DataAuthCacheRefreshEventData eventData = new DataAuthCacheRefreshEventData(); OperationResult result = await _entityRoleRepository.UpdateAsync(dtos, async (dto, entity) => { TRole role = await _roleRepository.GetAsync(dto.RoleId); if (role == null) { throw new OsharpException($"编号为“{dto.RoleId}”的角色信息不存在"); } TEntityInfo entityInfo = await _entityInfoRepository.GetAsync(dto.EntityId); if (entityInfo == null) { throw new OsharpException($"编号为“{dto.EntityId}”的数据实体信息不存在"); } if (await CheckEntityRoleExists(m => m.RoleId.Equals(dto.RoleId) && m.EntityId == dto.EntityId && m.Operation == dto.Operation, dto.Id)) { throw new OsharpException($"角色“{role.Name}”和实体“{entityInfo.Name}”和操作“{dto.Operation}”的数据权限规则已存在,不能重复添加"); } OperationResult checkResult = CheckFilterGroup(dto.FilterGroup, entityInfo); if (!checkResult.Succeeded) { throw new OsharpException($"数据规则验证失败:{checkResult.Message}"); } DataAuthCacheItem cacheItem = new DataAuthCacheItem() { RoleName = role.Name, EntityTypeFullName = entityInfo.TypeName, Operation = dto.Operation, FilterGroup = dto.FilterGroup }; if (dto.IsLocked) { eventData.RemoveItems.Add(cacheItem); } else { eventData.SetItems.Add(cacheItem); } }); if (result.Succeeded && eventData.HasData()) { await _eventBus.PublishAsync(eventData); } return(result); }
/// <summary> /// 添加实体角色信息信息 /// </summary> /// <param name="dtos">要添加的实体角色信息DTO信息</param> /// <returns>业务操作结果</returns> public virtual async Task <OperationResult> CreateEntityRoles(params TEntityRoleInputDto[] dtos) { List <DataAuthCacheItem> cacheItems = new List <DataAuthCacheItem>(); OperationResult result = await _entityRoleRepository.InsertAsync(dtos, async dto => { TRole role = await _roleRepository.GetAsync(dto.RoleId); if (role == null) { throw new OsharpException($"编号为“{dto.RoleId}”的角色信息不存在"); } TEntityInfo entityInfo = await _entityInfoRepository.GetAsync(dto.EntityId); if (entityInfo == null) { throw new OsharpException($"编号为“{dto.EntityId}”的数据实体信息不存在"); } if (await CheckEntityRoleExists(m => m.RoleId.Equals(dto.RoleId) && m.EntityId == dto.EntityId && m.Operation == dto.Operation)) { throw new OsharpException($"角色“{role.Name}”和实体“{entityInfo.Name}”和操作“{dto.Operation}”的数据权限规则已存在,不能重复添加"); } OperationResult checkResult = CheckFilterGroup(dto.FilterGroup, entityInfo); if (!checkResult.Successed) { throw new OsharpException($"数据规则验证失败:{checkResult.Message}"); } cacheItems.Add(new DataAuthCacheItem() { RoleName = role.Name, EntityTypeFullName = entityInfo.TypeName, Operation = dto.Operation, FilterGroup = dto.FilterGroup }); }); if (result.Successed && cacheItems.Count > 0) { DataAuthCacheRefreshEventData eventData = new DataAuthCacheRefreshEventData() { CacheItems = cacheItems }; _eventBus.Publish(eventData); } return(result); }