Пример #1
0
        public async Task Create(CreateRoleInput input)
        {
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitRole != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的角色");
            }
            var role = input.MapTo <Role>();

            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var roleId            = await _roleRepository.InsertAndGetIdAsync(role, conn, trans);
                var queryOperationSql = "SELECT o.* FROM `Operation` as o LEFT JOIN Permission as p ON o.PermissionId = p.Id AND p.IsDeleted = 0 AND o.IsDeleted = 0 WHERE o.PermissionId IN @PermissionIds";

                var operations = await conn.QueryAsync <Operation>(queryOperationSql, new { PermissionIds = input.PermissionIds }, transaction: trans);
                if (!operations.Any(p => p.Mold == Shared.Operations.OperationMold.Query || p.Mold == Shared.Operations.OperationMold.Look))
                {
                    throw new BusinessException($"分配的权限至少要包含查询或是查看类型操作");
                }
                await _rolePermissionRepository.DeleteAsync(p => p.RoleId == roleId, conn, trans);
                foreach (var permissionId in input.PermissionIds)
                {
                    var permission = await _permissionRepository.SingleOrDefaultAsync(p => p.Id == permissionId);
                    if (permission == null)
                    {
                        throw new BusinessException($"不存在Id为{permissionId}的权限信息");
                    }
                    await _rolePermissionRepository.InsertAsync(new RolePermission()
                    {
                        PermissionId = permissionId, RoleId = roleId
                    }, conn, trans);
                }
            }, Connection);
        }
Пример #2
0
        private async Task CreateSubCorporation(CreateCorporationInput input)
        {
            var parentCorporation = await _corporationRepository.SingleAsync(p => p.OrgId == input.ParentId.Value);

            if (parentCorporation.Mold == Shared.CorporationMold.Monomer)
            {
                throw new BusinessException("单体公司不允许增加子公司");
            }
            var parentOrg = await _organizationRepository.GetAsync(input.ParentId.Value);

            var corporation = input.MapTo <Corporation>();
            var orgInfo     = input.MapTo <Organization>();
            var orgCode     = string.Empty;
            var maxLevelOrg = (await _organizationRepository.GetAllAsync(p => p.ParentId == parentOrg.Id)).OrderByDescending(p => p.Id).FirstOrDefault();

            if (maxLevelOrg == null)
            {
                orgCode = "1".PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            }
            else
            {
                orgCode = (Convert.ToInt32(maxLevelOrg.Code.Split(HeroConstants.CodeRuleRestrain.CodeSeparator).Last().TrimStart('0')) + 1).ToString().PadLeft(HeroConstants.CodeRuleRestrain.CodeCoverBit, HeroConstants.CodeRuleRestrain.CodeCoverSymbol);
            }
            orgInfo.Code  = parentOrg.Code + HeroConstants.CodeRuleRestrain.CodeSeparator + orgCode;
            orgInfo.Level = parentOrg.Level + 1;
            await UnitOfWorkAsync(async (conn, trans) =>
            {
                var orgId         = await _organizationRepository.InsertAndGetIdAsync(orgInfo, conn, trans);
                corporation.OrgId = orgId;
                await _corporationRepository.InsertAsync(corporation, conn, trans);
            }, Connection);
        }
Пример #3
0
        public async Task CreatePosition(CreatePositionInput input, string positionCode, DbConnection conn, DbTransaction trans)
        {
            await CheckPosition(input);

            var position = input.MapTo <Position>();

            position.Code = positionCode;
            await _positionRepository.InsertAsync(position, conn, trans);
        }
Пример #4
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 = "新增操作成功"
            });
        }
Пример #5
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);
        }
Пример #6
0
 public async Task CreateOperation(Permission operation, IEnumerable <long> functionIds)
 {
     await UnitOfWorkAsync(async (conn, trans) => {
         var permissionId = await _permissionRepository.InsertAndGetIdAsync(operation, conn, trans);
         foreach (var funcId in functionIds)
         {
             var permissionFunc = new PermissionFunction()
             {
                 FunctionId   = funcId,
                 PermissionId = permissionId,
             };
             await _permissionFunctionRepository.InsertAsync(permissionFunc, conn, trans);
         }
     }, Connection);
 }
Пример #7
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);
        }
Пример #8
0
 public async Task CreateUser(CreateUserInput input)
 {
     await _userInfoRepository.InsertAsync(new UserInfo()
     {
         Code = input.Code,
         Name = input.Name
     });
 }
Пример #9
0
 public async Task CreateMenu(Menu menu, Permission permission)
 {
     await UnitOfWorkAsync(async (conn, trans) => {
         var permissionId  = await _permissionRepository.InsertAndGetIdAsync(permission, conn, trans);
         menu.PermissionId = permissionId;
         await _menuRepository.InsertAsync(menu, conn, trans);
     }, Connection);
 }
Пример #10
0
        public async Task <long> Create(CreateUserInput input, long?tenanId = null)
        {
            var userInfo = await CheckUserInfo(input, tenanId);

            userInfo.Password = _passwordHelper.EncryptPassword(userInfo.UserName, userInfo.Password);
            using (var locker = await _lockerProvider.CreateLockAsync("CreateUser"))
            {
                return(await locker.Lock(async() =>
                {
                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        var userId = await _userRepository.InsertAndGetIdAsync(userInfo, conn, trans);
                        foreach (var roleId in input.RoleIds)
                        {
                            var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleId, conn, trans);
                            if (role == null)
                            {
                                throw new BusinessException($"系统中不存在Id为{roleId}的角色信息");
                            }

                            await _userRoleRepository.InsertAsync(new UserRole {
                                UserId = userId, RoleId = roleId, TenantId = userInfo.TenantId
                            }, conn,
                                                                  trans);
                        }

                        foreach (var userGroupId in input.UserGroupIds)
                        {
                            var userGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == userGroupId);
                            if (userGroup == null)
                            {
                                throw new BusinessException($"系统中不存在Id为{userGroupId}的用户组信息");
                            }
                            await _userUserGroupRelationRepository.InsertAsync(
                                new UserUserGroupRelation {
                                UserId = userId, UserGroupId = userGroupId, TenantId = userInfo.TenantId
                            }, conn, trans);
                        }
                    }, Connection);
                    return userInfo.Id;
                }));
            }
        }
Пример #11
0
        public async Task CreateWordbook(CreateWordbookInput input)
        {
            var wordbook = await _wordbookRepository.FirstOrDefaultAsync(p => p.Code == input.Code);

            if (wordbook != null)
            {
                throw new BusinessException($"系统中已经存在code为{input.Code}的字典类型");
            }
            wordbook = input.MapTo <Wordbook>();
            await _wordbookRepository.InsertAsync(wordbook);
        }
Пример #12
0
        public async Task Create(CreateRoleInput input)
        {
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Name == input.Name);

            if (exsitRole != null)
            {
                throw new BusinessException($"系统中已经存在{input.Name}的角色");
            }
            var role = input.MapTo <Role>();
            await _roleRepository.InsertAsync(role);
        }
Пример #13
0
        public async Task Create(CreateUserInput input)
        {
            var userInfo = input.MapTo <UserInfo>();
            var departAppServiceProxy = GetService <IDepartmentAppService>();

            if (userInfo.OrgId.HasValue)
            {
                if (!await departAppServiceProxy.Check(userInfo.OrgId.Value))
                {
                    throw new BusinessException($"不存在Id为{userInfo.OrgId}的部门信息");
                }
            }
            var positionAppServiceProxy = GetService <IPositionAppService>();

            if (userInfo.PositionId.HasValue)
            {
                if (!await positionAppServiceProxy.Check(userInfo.PositionId.Value))
                {
                    throw new BusinessException($"不存在Id为{userInfo.PositionId}的职位信息");
                }
            }

            userInfo.Password = _passwordHelper.EncryptPassword(userInfo.UserName, userInfo.Password);
            await UnitOfWorkAsync(async (conn, trans) => {
                var userId = await _userRepository.InsertAndGetIdAsync(userInfo, conn, trans);
                foreach (var roleId in input.RoleIds)
                {
                    var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == roleId);
                    if (role == null)
                    {
                        throw new BusinessException($"系统中不存在Id为{roleId}的角色信息");
                    }

                    await _userRoleRepository.InsertAsync(new UserRole()
                    {
                        UserId = userId, RoleId = roleId
                    }, conn, trans);
                }
            }, Connection);
        }
Пример #14
0
        public async Task <string> Create(CreateRoleInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            var exsitRole = await _roleRepository.FirstOrDefaultAsync(p => p.Code == input.Code);

            if (exsitRole != null)
            {
                throw new UserFriendlyException($"已经存在{input.Code}的角色信息");
            }
            await _roleRepository.InsertAsync(input.MapTo <Role>());

            return("新增角色成功");
        }
        public async Task Should_Automatically_Save_Changes_On_Uow()
        {
            int blog1Id;
            int blog2Id;

            //Act

            using (IUnitOfWorkCompleteHandle uow = _uowManager.Begin())
            {
                Blog blog1 = await _blogRepository.SingleAsync(b => b.Name == "test-blog-1");

                blog1Id = blog1.Id;

                blog1.Name = "test-blog-1-updated";

                await _blogDapperRepository.InsertAsync(new Blog("test-blog-2", "www"));

                Blog blog2 = await _blogRepository.SingleAsync(x => x.Name == "test-blog-2");

                blog2Id = blog2.Id;

                blog2.Name = "test-blog-2-updated";

                await _blogDapperRepository.UpdateAsync(blog2);

                await uow.CompleteAsync();
            }

            //Assert

            await UsingDbContextAsync(async context =>
            {
                Blog blog1 = await context.Blogs.SingleAsync(b => b.Id == blog1Id);
                blog1.Name.ShouldBe("test-blog-1-updated");

                Blog blog2 = await context.Blogs.SingleAsync(b => b.Id == blog2Id);
                blog2.Name.ShouldBe("test-blog-2-updated");
            });
        }
Пример #16
0
        public async Task ShouldAutomaticallySaveChangesOnUow()
        {
            int blog1Id;
            int blog2Id;

            //Act

            using (var uow = uowManager.Begin())
            {
                var blog1 = await blogRepository.SingleAsync(b => b.Name == "test-blog-1");

                blog1Id = blog1.Id;

                blog1.Name = "test-blog-1-updated";

                await blogDapperRepository.InsertAsync(new Blog("test-blog-2", "www"));

                var blog2 = blogRepository.Single(x => x.Name == "test-blog-2");
                blog2Id = blog2.Id;

                blog2.Name = "test-blog-2-updated";

                blogDapperRepository.Update(blog2);

                await uow.CompleteAsync();
            }

            //Assert

            await UsingDbContextAsync(async context =>
            {
                var blog1 = await context.Blogs.SingleAsync(b => b.Id == blog1Id);
                blog1.Name.ShouldBe("test-blog-1-updated");

                var blog2 = await context.Blogs.SingleAsync(b => b.Id == blog2Id);
                blog2.Name.ShouldBe("test-blog-2-updated");
            });
        }
        public async Task Should_Insert_New_Entity_With_Guid_Id_with_dapper()
        {
            using (IUnitOfWorkCompleteHandle uow = _uowManager.Begin())
            {
                Blog blog1 = await _blogRepository.GetAsync(1);

                var post = new Post(blog1.Id, "a test title", "a test body");
                post.IsTransient().ShouldBeTrue();
                await _postDapperRepository.InsertAsync(post);

                await uow.CompleteAsync();

                post.IsTransient().ShouldBeFalse();
            }
        }
Пример #18
0
        public async Task ShouldInsertNewEntityWithGuidIdwithdapper()
        {
            using (var uow = uowManager.Begin())
            {
                var blog1 = await blogRepository.GetAsync(1);

                var post = new Post(blog1.Id, "a test title", "a test body");
                post.IsTransient().ShouldBeTrue();
                await postDapperRepository.InsertAsync(post);

                await uow.CompleteAsync();

                post.IsTransient().ShouldBeFalse();
            }
        }
Пример #19
0
        public async Task should_trigger_event_on_inserted_with_dapper()
        {
            var triggerCount = 0;

            Resolve <IEventBus>().Register <EntityCreatedEventData <Blog> >(
                eventData =>
            {
                eventData.Entity.Name.ShouldBe("OnSoftware");
                eventData.Entity.IsTransient().ShouldBe(false);
                triggerCount++;
            });

            await _blogDapperRepository.InsertAsync(new Blog("OnSoftware", "www.aspnetboilerplate.com"));

            triggerCount.ShouldBe(1);
        }
Пример #20
0
        public async Task CreateWordbookItem(CreateWordbookItemInput input)
        {
            var wordbook = await _wordbookRepository.SingleOrDefaultAsync(p => p.Id == input.WordbookId);

            if (wordbook == null)
            {
                throw new BusinessException($"系统中不存在Id为{input.WordbookId}的字典类型");
            }
            var wordbookItem = await _wordbookItemRepository.SingleOrDefaultAsync(p => p.Key == input.Key && p.WordbookId == input.WordbookId);

            if (wordbookItem != null)
            {
                throw new BusinessException($"{wordbook.Name}已经存在key为{input.Key}的字典项");
            }
            wordbookItem = input.MapTo <WordbookItem>();
            await _wordbookItemRepository.InsertAsync(wordbookItem);
        }
        public async Task <int> AddProductAndDetail(ProductInfo productInfo, List <ProductDetailInfo> productDetailInfos)
        {
            var productId = 0;

            using (IUnitOfWork uow = new DapperUnitOfWork(_traingRepositoryContext))
            {
                productId = await Connection.InsertAsync(productInfo) ?? 0;

                foreach (var productDetailInfo in productDetailInfos)
                {
                    productDetailInfo.ProductId = productId;
                    await _dapperRepository.InsertAsync(productDetailInfo);
                }
                uow.SaveChanges();
            }
            return(productId);
        }
Пример #22
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 = "新增菜单成功"
            });
        }
Пример #23
0
        public async Task <GetSystemConfigOutput> GetSystemConfig()
        {
            var sysConfig = await _systemConfigRepository.FirstOrDefaultAsync(p => p.TenantId == _session.TenantId);

            if (sysConfig == null)
            {
                var newSysconfig = new SystemConfig()
                {
                    SysName = HeroConstants.DefaultSysName,
                    NonPermissionOperationStyle = NonPermissionOperationStyle.Displayed
                };
                await _systemConfigRepository.InsertAsync(newSysconfig);

                return(newSysconfig.MapTo <GetSystemConfigOutput>());
            }

            return(sysConfig.MapTo <GetSystemConfigOutput>());
        }
Пример #24
0
 public async Task <bool> CreateAsync(UserInfo user)
 {
     if (user == null)
     {
         throw new ArgumentNullException(nameof(UserInfo));
     }
     UnitOfWork((conn, trans) => {
         var userId = UserRepository.InsertAndGetIdAsync(user, conn, trans).Result;
         if (user.Roles.Any())
         {
             foreach (var role in user.Roles)
             {
                 role.UserId = userId;
                 _userRoleRepository.InsertAsync(role, conn, trans).Wait();
             }
         }
     }, Connection);
     return(true);
 }
Пример #25
0
        public async Task Dapper_Repository_Count_Should_Return_Correct_Value_For_Nullable_Int_Filter()
        {
            using (IUnitOfWorkCompleteHandle uow = _unitOfWorkManager.Begin())
            {
                using (_unitOfWorkManager.Current.SetTenantId(AbpSession.TenantId))
                {
                    await _goodDapperRepository.InsertAsync(new Good { Name = "AbpTest" });

                    await _unitOfWorkManager.Current.SaveChangesAsync();

                    int?id = 1;

                    var dapperCount = await _goodDapperRepository.CountAsync(a => a.Id != id && a.Name == "AbpTest");

                    dapperCount.ShouldBe(0);
                }

                uow.Complete();
            }
        }
Пример #26
0
        public async Task <string> AllocationUsers(AllocationUserIdsInput input)
        {
            var userGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == input.UserGroupId);

            if (userGroup == null)
            {
                throw new BusinessException($"不存在Id为{input.UserGroupId}的用户组");
            }
            using (var locker = await _lockerProvider.CreateLockAsync("AllocationUsers"))
            {
                return(await locker.Lock(async() =>
                {
                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        foreach (var userId in input.UserIds)
                        {
                            var userInfo = await _userRepository.SingleOrDefaultAsync(p => p.Id == userId, conn, trans);
                            if (userInfo == null)
                            {
                                throw new BusinessException($"不存在用户Id为{userId}的用户信息");
                            }
                            var userUserGroupRelation =
                                await _userUserGroupRelationRepository.SingleOrDefaultAsync(
                                    p => p.UserId == userId && p.UserGroupId == input.UserGroupId, conn, trans);
                            if (userUserGroupRelation == null)
                            {
                                await _userUserGroupRelationRepository.InsertAsync(
                                    new UserUserGroupRelation {
                                    UserGroupId = userGroup.Id, UserId = userId
                                }, conn,
                                    trans);
                            }
                        }
                        // todo 可只删除受影响的用户
                        await RemoveUserGroupCheckPemissionCache(userGroup.Id);
                    }, Connection);
                    return $"为用户组{userGroup.Name}分配用户成功";
                }));
            }
        }
Пример #27
0
        public async Task <string> Create(CreateUserGroupInput input)
        {
            input.CheckDataAnnotations().CheckValidResult();
            if (input.ParentId != 0)
            {
                var parentUserGroup = await _userGroupRepository.SingleOrDefaultAsync(p => p.Id == input.ParentId);

                if (parentUserGroup == null)
                {
                    throw new BusinessException($"不存在父Id为{input.ParentId}的用户组");
                }
            }
            var existUserGroup = await _userGroupRepository.FirstOrDefaultAsync(p => p.GroupCode == input.GroupCode);

            if (existUserGroup != null)
            {
                throw new BusinessException($"已经存在{input.GroupCode}的用户组");
            }
            var userGroupEntity = input.MapTo <UserGroup>();
            await _userGroupRepository.InsertAsync(userGroupEntity);

            return("新增用户组成功");
        }
Пример #28
0
        public async Task CreateUserInfo(UserInfo userInfo)
        {
            var rpcParams = new Dictionary <string, object>()
            {
                { "confName", IdentityConstants.SysConfPwdModeName }
            };
            var pwdConfig = await _serviceProxyProvider.Invoke <GetSystemConfOutput>(rpcParams, ApiConsts.BasicData.GetSysConfApi);

            if (pwdConfig == null)
            {
                throw new BusinessException("获取用户加密模式失败,请先完成系统初始化");
            }
            var generatePwdMode = ConvertHelper.ParseEnum <GeneratePwdMode>(pwdConfig.ConfigValue);
            var plainPwd        = string.Empty;

            if (generatePwdMode == GeneratePwdMode.Fixed)
            {
                rpcParams = new Dictionary <string, object>()
                {
                    { "confName", IdentityConstants.SysConfFieldModeName }
                };
                var fixedPwdConf = await _serviceProxyProvider.Invoke <GetSystemConfOutput>(rpcParams, ApiConsts.BasicData.GetSysConfApi);

                if (pwdConfig == null)
                {
                    throw new BusinessException("未配置员工用户默认密码");
                }
                plainPwd = fixedPwdConf.ConfigValue;
            }
            else
            {
                plainPwd = PasswordGenerator.GetRandomPwd(IdentityConstants.RandomLen);
                // :todo email send pwd
            }
            userInfo.Password = _passwordHelper.EncryptPassword(userInfo.UserName, plainPwd);
            await _userRepository.InsertAsync(userInfo);
        }
Пример #29
0
        public async Task SetPermissions(SetRolePermissionInput input)
        {
            var role = await _roleRepository.SingleOrDefaultAsync(p => p.Id == input.RoleId);

            if (role == null)
            {
                throw new BusinessException($"不存在Id为{input.RoleId}的角色信息");
            }
            await UnitOfWorkAsync(async (conn, trans) => {
                await _rolePermissionRepository.DeleteAsync(p => p.RoleId == input.RoleId, conn, trans);
                foreach (var permissionId in input.PermissionIds)
                {
                    var permission = await _permissionRepository.SingleOrDefaultAsync(p => p.Id == permissionId);
                    if (permission == null)
                    {
                        throw new BusinessException($"不存在Id为{permissionId}的权限信息");
                    }
                    await _rolePermissionRepository.InsertAsync(new RolePermission()
                    {
                        PermissionId = permissionId, RoleId = input.RoleId
                    }, conn, trans);
                }
            }, Connection);
        }
Пример #30
0
        public async Task <long> Create(CreateRoleInput input, long?tenantId = null)
        {
            using (var locker = await _lockerProvider.CreateLockAsync("CreateRole"))
            {
                return(await locker.Lock(async() =>
                {
                    var exsitRole =
                        await _roleRepository.FirstOrDefaultAsync(p => p.Identification == input.Identification, false);
                    if (exsitRole != null)
                    {
                        throw new BusinessException($"系统中已经存在{input.Identification}的角色");
                    }
                    CheckUserDefinedDataPermission(input.DataPermissionType, input.DataPermissionOrgIds);
                    var role = input.MapTo <Role>();
                    role.TenantId = _session.TenantId;
                    if (tenantId.HasValue)
                    {
                        role.TenantId = tenantId.Value;
                    }

                    await UnitOfWorkAsync(async(conn, trans) =>
                    {
                        var roleId = await _roleRepository.InsertAndGetIdAsync(role, conn, trans);
                        await _rolePermissionRepository.DeleteAsync(p => p.RoleId == role.Id, conn, trans);
                        var insertSql =
                            "INSERT INTO RolePermission(PermissionId,RoleId,CreateTime,CreateBy,TenantId) VALUES(@PermissionId,@RoleId,@CreationTime,@CreatorUserId,@TenantId)";
                        var rolePermissions = new List <RolePermission>();
                        foreach (var permissionId in input.PermissionIds)
                        {
                            rolePermissions.Add(new RolePermission
                            {
                                PermissionId = permissionId,
                                RoleId = roleId,
                                CreationTime = DateTime.Now,
                                CreatorUserId = _session.UserId,
                                TenantId = role.TenantId
                            });
                        }
                        await conn.ExecuteAsync(insertSql, rolePermissions, trans);
                        if (!input.IsAllOrg)
                        {
                            foreach (var orgId in input.OrgIds)
                            {
                                var roleOrg = new RoleOrganization()
                                {
                                    RoleId = roleId, OrgId = orgId, TenantId = role.TenantId
                                };
                                await _roleOrganizationRepository.InsertAsync(roleOrg, conn, trans);
                            }
                        }

                        if (input.DataPermissionType == DataPermissionType.UserDefined)
                        {
                            var insertDataPermissionOrgSql =
                                "INSERT INTO RoleDataPermissionOrgRelation(RoleId,OrgId,CreateTime,CreateBy,TenantId) VALUES(@RoleId,@OrgId,@CreationTime,@CreatorUserId,@TenantId)";
                            var dataPermissionOrgDatas = new List <RoleDataPermissionOrgRelation>();
                            foreach (var orgId in input.DataPermissionOrgIds)
                            {
                                dataPermissionOrgDatas.Add(new RoleDataPermissionOrgRelation()
                                {
                                    RoleId = roleId,
                                    OrgId = orgId,
                                    CreationTime = DateTime.Now,
                                    CreatorUserId = _session.UserId,
                                    TenantId = role.TenantId
                                });
                            }

                            await conn.ExecuteAsync(insertDataPermissionOrgSql, dataPermissionOrgDatas, trans);
                        }
                    }, Connection);
                    return role.Id;
                }));
            }
        }