Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }