/// <summary> /// 批量插入 /// </summary> /// <param name="inputDto"></param> /// <returns></returns> public async Task CreateAsync(CreateGroupDto inputDto) { bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name); if (exist) { throw new LinCmsException("分组已存在,不可创建同名分组", ErrorCode.RepeatField); } LinGroup linGroup = _mapper.Map <LinGroup>(inputDto); using var conn = _freeSql.Ado.MasterPool.Get(); DbTransaction transaction = conn.Value.BeginTransaction(); try { long groupId = _freeSql.Insert(linGroup).WithTransaction(transaction).ExecuteIdentity(); List <LinPermission> allPermissions = _freeSql.Select <LinPermission>().ToList(); List <LinGroupPermission> linPermissions = new List <LinGroupPermission>(); inputDto.PermissionIds.ForEach(r => { LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r); if (pdDto == null) { throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound); } linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id)); }); _freeSql.Insert <LinGroupPermission>().WithTransaction(transaction).AppendData(linPermissions).ExecuteAffrows(); transaction.Commit(); } catch { transaction.Rollback(); throw; } //_freeSql.Transaction(() => //{ // long groupId = _freeSql.Insert(linGroup).ExecuteIdentity(); // List<LinPermission> allPermissions = _freeSql.Select<LinPermission>().ToList(); // List<LinGroupPermission> linPermissions = new List<LinGroupPermission>(); // inputDto.PermissionIds.ForEach(r => // { // LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r); // if (pdDto == null) // { // throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound); // } // linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id)); // }); // _freeSql.Insert<LinGroupPermission>().AppendData(linPermissions).ExecuteAffrows(); //}); }
/// <summary> /// 批量插入 /// </summary> /// <param name="inputDto"></param> /// <returns></returns> public async Task CreateAsync(CreateGroupDto inputDto) { bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name); if (exist) { throw new LinCmsException("分组已存在,不可创建同名分组", ErrorCode.RepeatField); } LinGroup linGroup = _mapper.Map <LinGroup>(inputDto); _freeSql.Transaction(() => { long groupId = _freeSql.Insert(linGroup).ExecuteIdentity(); List <LinPermission> allPermissions = _freeSql.Select <LinPermission>().ToList(); List <LinGroupPermission> linPermissions = new List <LinGroupPermission>(); inputDto.PermissionIds.ForEach(r => { LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r); if (pdDto == null) { throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound); } linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id)); }); _freeSql.Insert <LinGroupPermission>().AppendData(linPermissions).ExecuteAffrows(); }); }
/// <summary> /// 检查当前登录的用户的分组权限 /// </summary> /// <param name="permission"></param> /// <returns></returns> public async Task <bool> CheckPermissionAsync(string permission) { long[] groups = CurrentUser.Groups; LinPermission linPermission = await _permissionRepository.Where(r => r.Name == permission).FirstAsync(); bool existPermission = await _groupPermissionRepository.Select .AnyAsync(r => groups.Contains(r.GroupId) && r.PermissionId == linPermission.Id); return(existPermission); }
public async Task <bool> CheckPermissionAsync(string permission) { long[] groups = _currentUser.Groups; LinPermission linPermission = await _freeSql.Select <LinPermission>().Where(r => r.Name == permission).FirstAsync(); bool existPermission = await _freeSql.Select <LinGroupPermission>() .AnyAsync(r => groups.Contains(r.GroupId) && r.PermissionId == linPermission.Id); return(existPermission); }
/// <summary> /// 权限标签上的Permission改变时,删除数据库中存在的无效权限,并生成新的权限。 /// </summary> /// <returns></returns> public async Task SeedPermissionAsync(List <PermissionDefinition> linCmsAttributes, CancellationToken cancellationToken) { List <LinPermission> insertPermissions = new List <LinPermission>(); List <LinPermission> updatePermissions = new List <LinPermission>(); List <LinPermission> allPermissions = await _permissionRepository.Select.ToListAsync(); Expression <Func <LinGroupPermission, bool> > expression = u => false; Expression <Func <LinPermission, bool> > permissionExpression = u => false; allPermissions.ForEach(permissioin => { if (linCmsAttributes.All(r => r.Permission != permissioin.Name)) { expression = expression.Or(r => r.PermissionId == permissioin.Id); permissionExpression = permissionExpression.Or(r => r.Id == permissioin.Id); } }); int effectRows = await _permissionRepository.DeleteAsync(permissionExpression, cancellationToken); effectRows += await _groupPermissionRepository.DeleteAsync(expression, cancellationToken); _logger.LogInformation($"删除了{effectRows}条数据"); linCmsAttributes.ForEach(r => { LinPermission permissionEntity = allPermissions.FirstOrDefault(u => u.Module == r.Module && u.Name == r.Permission); if (permissionEntity == null) { insertPermissions.Add(new LinPermission(r.Permission, r.Module, r.Router)); } else { bool routerExist = allPermissions.Any(u => u.Module == r.Module && u.Name == r.Permission && u.Router == r.Router); if (!routerExist) { permissionEntity.Router = r.Router; updatePermissions.Add(permissionEntity); } } }); await _permissionRepository.InsertAsync(insertPermissions, cancellationToken); _logger.LogInformation($"新增了{insertPermissions.Count}条数据"); await _permissionRepository.UpdateAsync(updatePermissions, cancellationToken); _logger.LogInformation($"更新了{updatePermissions.Count}条数据"); }
/// <summary> /// 批量插入 /// </summary> /// <param name="inputDto"></param> /// <returns></returns> public async Task CreateAsync(CreateGroupDto inputDto) { bool exist = await _groupRepository.Select.AnyAsync(r => r.Name == inputDto.Name); if (exist) { throw new LinCmsException($"权限组标识符{inputDto.Name}已存在,不可创建同名权限组", ErrorCode.RepeatField); } LinGroup linGroup = Mapper.Map <LinGroup>(inputDto); using Object <DbConnection> conn = _freeSql.Ado.MasterPool.Get(); using DbTransaction transaction = await conn.Value.BeginTransactionAsync(); try { long groupId = await _freeSql.Insert(linGroup).WithTransaction(transaction).ExecuteIdentityAsync(); List <LinPermission> allPermissions = await _freeSql.Select <LinPermission>().WithTransaction(transaction).ToListAsync(); List <LinGroupPermission> linPermissions = new List <LinGroupPermission>(); inputDto.PermissionIds.ForEach(r => { LinPermission pdDto = allPermissions.FirstOrDefault(u => u.Id == r); if (pdDto == null) { throw new LinCmsException($"不存在此权限:{r}", ErrorCode.NotFound); } linPermissions.Add(new LinGroupPermission(groupId, pdDto.Id)); }); await _freeSql.Insert <LinGroupPermission>() .WithTransaction(transaction) .AppendData(linPermissions) .ExecuteAffrowsAsync(); await transaction.CommitAsync(); } catch { await transaction.RollbackAsync(); throw; } }