Esempio n. 1
0
        public async Task <int> GetOrgUserCount(long orgId, bool includeSubOrg)
        {
            var orgUserCount = 0;

            if (includeSubOrg)
            {
                var subOrdIds = await GetService <IOrganizationAppService>().GetSubOrgIds(orgId);

                Expression <Func <UserInfo, bool> > expression = null;
                foreach (var subOrdId in subOrdIds)
                {
                    if (expression == null)
                    {
                        expression = p => p.OrgId == subOrdId;
                    }
                    else
                    {
                        expression = expression.Or(p => p.OrgId == subOrdId);
                    }
                }

                orgUserCount = await _userRepository.GetCountAsync(expression);
            }
            else
            {
                orgUserCount = await _userRepository.GetCountAsync(p => p.OrgId == orgId);
            }

            return(orgUserCount);
        }
Esempio n. 2
0
        public async Task Delete(long roleid)
        {
            var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleid);

            if (role == null)
            {
                throw new BusinessException($"不存在Id为{roleid}的角色信息");
            }
            var userRoleCount = await _userRoleRepository.GetCountAsync(p => p.RoleId == roleid);

            if (userRoleCount > 0)
            {
                throw new BusinessException($"{role.Name}被分配用户,请先删除相关授权的用户信息");
            }
            var userGroupRoleCount = await _userGroupRoleRepository.GetCountAsync(p => p.RoleId == roleid);

            if (userRoleCount > 0)
            {
                throw new BusinessException($"{role.Name}被分配用户组,请先删除相关授权的用户组信息");
            }
            await UnitOfWorkAsync(async (conn, trans) =>
            {
                await _roleRepository.DeleteAsync(p => p.Id == roleid, conn, trans);
                await _rolePermissionRepository.DeleteAsync(p => p.RoleId == roleid, conn, trans);
            }, Connection);
        }
Esempio n. 3
0
        public async Task Create(CreateMenuInput input)
        {
            var menu = input.MapTo <Menu>();
            var thisLevelMenuCount = await _menuRepository.GetCountAsync(p => p.ParentId == input.ParentId);

            if (menu.Mold == MenuMold.Top)
            {
                menu.Code  = (thisLevelMenuCount + 1).ToString().PadRight(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = 1;
            }
            else
            {
                var parentMenu = await _menuRepository.SingleOrDefaultAsync(p => p.Id == input.ParentId);

                if (parentMenu == null)
                {
                    throw new BusinessException($"不存在Id为{input.ParentId}的菜单信息");
                }
                menu.Code  = parentMenu.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (thisLevelMenuCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = parentMenu.Level + 1;
            }
            var permission = input.MapTo <Permission>();

            await UnitOfWorkAsync(async (conn, trans) => {
                var permissionId  = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
                menu.PermissionId = permissionId;
                await _menuRepository.InsertAsync(menu, conn, trans);
            }, Connection);
        }
Esempio n. 4
0
        public async Task <CreateMenuOutput> Create(CreateMenuInput input)
        {
            var  menu         = input.MapTo <Menu>();
            long menuParentId = 0;
            var  exsitMenu    = await _menuRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitMenu != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的菜单,请勿重复添加");
            }
            if (menu.Mold == MenuMold.Top)
            {
                var thisLevelMenuCount = await _menuRepository.GetCountAsync(p => p.Mold == MenuMold.Top);

                menu.Code  = (thisLevelMenuCount + 1).ToString().PadRight(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = 1;
            }
            else
            {
                var parentMenu = await _menuRepository.SingleOrDefaultAsync(p => p.PermissionId == input.ParentPermissionId);

                if (parentMenu == null)
                {
                    throw new BusinessException($"不存在PermissionId为{input.ParentPermissionId}的菜单信息");
                }
                menuParentId = parentMenu.Id;
                var thisLevelMenuCount = await _menuRepository.GetCountAsync(p => p.Mold == MenuMold.SubMenu && p.ParentId == parentMenu.Id);

                menu.Code  = parentMenu.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (thisLevelMenuCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
                menu.Level = parentMenu.Level + 1;
            }
            var permission = input.MapTo <Permission>();

            await UnitOfWorkAsync(async (conn, trans) => {
                var permissionId  = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
                menu.PermissionId = permissionId;
                menu.ParentId     = menuParentId;
                await _menuRepository.InsertAsync(menu, conn, trans);
            }, Connection);

            return(new CreateMenuOutput()
            {
                Id = menu.Id, PermissionId = menu.PermissionId, Tips = "新增菜单成功"
            });
        }
Esempio n. 5
0
        public async Task DeleteRoleById(long roleId)
        {
            var roleUserCount = await _userRoleRepository.GetCountAsync(p => p.RoleId == roleId);

            if (roleUserCount > 0)
            {
                throw new BusinessException("该角色被分配有用户,请先删除用户后再尝试");
            }
            await UnitOfWorkAsync(async (conn, trans) => {
                await _roleRepository.DeleteAsync(p => p.Id == roleId, conn, trans);
                await _rolePermissionRepository.DeleteAsync(p => p.RoleId == roleId, conn, trans);
            }, Connection);
        }
Esempio n. 6
0
        public async Task <CreateOperationOutput> Create(CreateOperationInput input)
        {
            var exsitOperation = await _operationRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitOperation != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的操作,请勿重复添加");
            }
            var menu = await _menuRepository.SingleOrDefaultAsync(p => p.PermissionId == input.PermissionId);

            if (menu == null)
            {
                throw new BusinessException($"不存在PermissionId为{input.PermissionId}的菜单信息");
            }
            var operation  = input.MapTo <Operation>();
            var permission = input.MapTo <Permission>();

            var operationCount = await _operationRepository.GetCountAsync(p => p.MenuId == input.PermissionId);

            operation.Code  = menu.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (operationCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            operation.Level = menu.Level + 1;

            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var permissionId       = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
                operation.PermissionId = permissionId;
                operation.MenuId       = menu.Id;
                var operationId        = await _operationRepository.InsertAndGetIdAsync(operation, conn, trans);
                if (input.ActionIds != null && input.ActionIds.Any())
                {
                    foreach (var actionId in input.ActionIds)
                    {
                        var action = await _actionRepository.SingleOrDefaultAsync(p => p.Id == actionId);
                        if (action == null)
                        {
                            throw new BusinessException($"系统中不存在Id为{actionId}的方法");
                        }
                        var operationAction = new OperationActionRelation()
                        {
                            ActionId = actionId, OperationId = operationId, ServiceId = action.ServiceId
                        };
                        await _operationActionRepository.InsertAsync(operationAction, conn, trans);
                    }
                }
            }, Connection);

            return(new CreateOperationOutput()
            {
                Id = operation.Id, PermissionId = operation.PermissionId, Tips = "新增操作成功"
            });
        }
Esempio n. 7
0
        public async Task Create(CreateUserGroupInput input)
        {
            var userGroup = input.MapTo <UserGroup>();
            var thisLevelUserGroupCount = await _userGroupRepository.GetCountAsync(p => p.ParentId == input.ParentId);

            if (input.ParentId == 0)
            {
                userGroup.Level = 1;
                userGroup.Code  = (thisLevelUserGroupCount + 1).ToString().PadRight(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            }
            else
            {
                var parentUserGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == input.ParentId);

                if (parentUserGroup == null)
                {
                    throw new BusinessException($"不存在Id为{input.ParentId}的用户组信息");
                }
                userGroup.Level = parentUserGroup.Level + 1;
                userGroup.Code  = parentUserGroup.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + (thisLevelUserGroupCount + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            }
            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var userGroupId = await _userGroupRepository.InsertAndGetIdAsync(userGroup, conn, trans);
                foreach (var userId in input.UserIds)
                {
                    var userInfo = await _userRepository.SingleOrDefaultAsync(p => p.Id == userId);
                    if (userInfo == null)
                    {
                        throw new BusinessException($"不存在用户Id为{userId}的用户信息");
                    }
                    await _userUserGroupRelationRepository.InsertAsync(new UserUserGroupRelation()
                    {
                        UserGroupId = userGroupId, UserId = userId
                    }, conn, trans);
                }
                foreach (var roleId in input.RoleIds)
                {
                    var roleInfo = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleId);
                    if (roleInfo == null)
                    {
                        throw new BusinessException($"不存在用户Id为{roleId}的角色信息");
                    }
                    await _userGroupRoleRepository.InsertAsync(new UserGroupRole()
                    {
                        UserGroupId = userGroupId, RoleId = roleId
                    }, conn, trans);
                }
            }, Connection);
        }
Esempio n. 8
0
        private async Task <bool> UpdateOrgIdsEqExistOrgIds(long[] inputOrgIds, long[] userGroupOrganizationIds, long userGroupId)
        {
            var userGroupUserCount = await _userUserGroupRelationRepository.GetCountAsync(p => p.UserGroupId == userGroupId);

            if (userGroupUserCount <= 0)
            {
                return(true);
            }

            if (inputOrgIds.Length != userGroupOrganizationIds.Length)
            {
                return(false);
            }

            return(!inputOrgIds.Where((t, i) => t != userGroupOrganizationIds[i]).Any());
        }
Esempio n. 9
0
        public async Task DeleteUserGroupById(long userGroupId)
        {
            var userGroupchildrenCount = await _userGroupRepository.GetCountAsync(p => p.ParentId == userGroupId);

            if (userGroupchildrenCount > 0)
            {
                throw new BusinessException("要删除的用户组存在子节点,请先删除子用户组");
            }
            var deleteUserGroupRoleCount = await _userGroupRoleRepository.GetCountAsync(p => p.UserGroupId == userGroupId);

            if (deleteUserGroupRoleCount > 0)
            {
                throw new BusinessException("要删除的用户组分配了角色,无法删除,请先取消角色授权");
            }
            await UnitOfWorkAsync(async (conn, trans) => {
                await _userGroupRepository.DeleteAsync(p => p.Id == userGroupId, conn, trans);
                await _userGroupRelationRepository.DeleteAsync(p => p.UserGroupId == userGroupId, conn, trans);
            }, Connection);
        }
Esempio n. 10
0
        public async Task Delete(long roleid)
        {
            var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleid);

            if (role == null)
            {
                throw new BusinessException($"不存在Id为{roleid}的角色信息");
            }
            _session.CheckLoginUserDataPermision(role.DataPermissionType, "您设置的角色的数据权限大于您拥有数据权限,系统不允许该操作");
            var userRoleCount = await _userRoleRepository.GetCountAsync(p => p.RoleId == roleid);

            if (userRoleCount > 0)
            {
                throw new BusinessException($"{role.Name}被分配用户,请先删除相关授权的用户信息");
            }
            var userGroupRoleCount = await _userGroupRoleRepository.GetCountAsync(p => p.RoleId == roleid);

            if (userGroupRoleCount > 0)
            {
                throw new BusinessException($"{role.Name}被分配用户组,请先删除相关授权的用户组信息");
            }
            using (var locker = await _lockerProvider.CreateLockAsync("DeleteRole"))
            {
                await locker.Lock(async() =>
                {
                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        await _roleRepository.DeleteAsync(p => p.Id == roleid, conn, trans);
                        await _rolePermissionRepository.DeleteAsync(p => p.RoleId == roleid, conn, trans);
                        await _roleDataPermissionOrgRelationRepository.DeleteAsync(p => p.RoleId == roleid, conn,
                                                                                   trans);
                        await _roleOrganizationRepository.DeleteAsync(p => p.RoleId == roleid, conn, trans);
                        await RemoveRoleCheckPemissionCache(roleid);
                    }, Connection);
                });
            }
        }
Esempio n. 11
0
 public async Task <int> GetPositionUserCount(long positionId)
 {
     return(await _userRepository.GetCountAsync(p => p.PositionId == positionId));
 }