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); }
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); }
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); }
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 = "新增操作成功" }); }
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); }
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); }
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); }
public async Task CreateUser(CreateUserInput input) { await _userInfoRepository.InsertAsync(new UserInfo() { Code = input.Code, Name = input.Name }); }
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); }
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; })); } }
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); }
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); }
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); }
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"); }); }
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(); } }
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(); } }
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); }
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); }
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 = "新增菜单成功" }); }
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>()); }
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); }
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(); } }
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}分配用户成功"; })); } }
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("新增用户组成功"); }
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); }
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); }
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; })); } }