Exemple #1
0
        /// <summary>
        /// 添加角色
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public async Task <IResponseOutput> AddRoleAsync(RoleSaveDto dto)
        {
            var list = await _roleRepo.FindListAsync(_ => _.Name == dto.Name);

            if (list.Count > 0)
            {
                return(ResponseOutput.NotOk("名称重复"));
            }
            var data = ObjectMapper.Map <RoleEntity>(dto);

            data.CreatedTime = DateTime.Now;
            await _roleRepo.InsertAsync(data);

            return(ResponseOutput.Ok());
        }
        public async Task <IResponseOutput> GenerateTokenAsync(string type, string code, string state)
        {
            if (!StateManager.IsExist(state))
            {
                return(ResponseOutput.NotOk("Request failed"));
            }

            StateManager.Remove(state);
            var token = type switch
            {
                "github" => GenerateToken(await _githubService.GetUserByOAuthAsync(type, code, state)),
                _ => throw new NotImplementedException($"Not implemented {type}")
            };

            return(ResponseOutput.Ok(token));
        }
        public IResponseOutput RequestToken([FromBody] LoginRequestDto request)
        {
            if (!ModelState.IsValid)
            {
                return(ResponseOutput.NotOk("Invalid Request"));
            }

            string token;

            if (_authService.IsAuthenticated(request, out token))
            {
                return(ResponseOutput.Ok(token));
            }

            return(ResponseOutput.NotOk("Invalid Request"));
        }
Exemple #4
0
        /// <summary>
        /// 异常处理
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            Log.Logger = new LoggerConfiguration().CreateLogger();
            if (context.Exception != null)
            {
                context.Result = new ContentResult()
                {
                    Content    = ResponseOutput.Error(context.Exception.Message, context.Exception).SerializeToJson(),
                    StatusCode = StatusCodes.Status200OK
                };

                context.ExceptionHandled = true;

                Log.Error(context.Exception, $"{context.HttpContext.Request.Path}|{context.Exception.Message}");
            }
        }
Exemple #5
0
        public async Task <IResponseOutput> GetListAsync(string key, DateTime?start, DateTime?end)
        {
            if (end.HasValue)
            {
                end = end.Value.AddDays(1);
            }

            var data = await _DocumentRepository
                       .WhereIf(key.NotNull(), a => a.Name.Contains(key) || a.Label.Contains(key))
                       .WhereIf(start.HasValue && end.HasValue, a => a.CreatedTime.Value.BetweenEnd(start.Value, end.Value))
                       .OrderBy(a => a.ParentId)
                       .OrderBy(a => a.Sort)
                       .ToListAsync <DocumentListOutput>();

            return(ResponseOutput.Ok(data));
        }
        async public Task <IResponseOutput> List([FromQuery] int workTypeId, int page, int size)
        {
            var list = await _fsql.Select <WireRodType>()
                       .WhereIf(workTypeId != 0, p => p.WorkTypeId == workTypeId)
                       .Count(out var total)
                       .Page(page, size)
                       .ToListAsync();

            return(ResponseOutput.Ok(new Pagenation <WireRodType>
            {
                Page = page,
                Total = total,
                Size = size,
                List = list,
            }));
        }
Exemple #7
0
        public async Task <IResponseOutput> GetById([FromRoute] int id)
        {
            var user = await _fsql.Select <User>().From <Department, UserRole, Role>((u, d, ur, r) => u
                                                                                     .LeftJoin(a => a.DepartmentId == d.Id)
                                                                                     .LeftJoin(a => a.Id == ur.UserId)
                                                                                     .LeftJoin(a => ur.RoleId == r.Id))
                       .WhereIf(id > 0, (u, d, ur, r) => u.Id == id)
                       .FirstAsync((u, d, ur, r) => new UserResponseDto
            {
                Id             = u.Id,
                DepartmentName = d.Name,
                RoleName       = r.Name,
            });

            return(ResponseOutput.Ok(user));
        }
Exemple #8
0
        public async Task <IResponseOutput> GetUserInfoAsync()
        {
            if (!(User?.Id > 0))
            {
                return(ResponseOutput.NotOk("未登录!"));
            }

            var key    = string.Format(CacheKey.UserInfo, User.Id);
            var output = await Cache.GetOrSetAsync(key, async() =>
            {
                var authUserInfoOutput = new AuthUserInfoOutput {
                };
                //用户信息
                authUserInfoOutput.User = await _userRepository.GetAsync <AuthUserProfileDto>(User.Id);

                //用户菜单
                authUserInfoOutput.Menus = await _permissionRepository.Select
                                           .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
                                           .Where(a =>
                                                  _permissionRepository.Orm.Select <RolePermissionEntity>()
                                                  .InnerJoin <UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
                                                  .Where(b => b.PermissionId == a.Id)
                                                  .Any()
                                                  )
                                           .OrderBy(a => a.ParentId)
                                           .OrderBy(a => a.Sort)
                                           .ToListAsync(a => new AuthUserMenuDto {
                    ViewPath = a.View.Path
                });

                //用户权限点
                authUserInfoOutput.Permissions = await _permissionRepository.Select
                                                 .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
                                                 .Where(a =>
                                                        _permissionRepository.Orm.Select <RolePermissionEntity>()
                                                        .InnerJoin <UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == User.Id)
                                                        .Where(b => b.PermissionId == a.Id)
                                                        .Any()
                                                        )
                                                 .ToListAsync(a => a.Code);

                return(authUserInfoOutput);
            });

            return(ResponseOutput.Ok(output));
        }
        /// <summary>
        /// 获得token
        /// </summary>
        /// <param name="output"></param>
        /// <returns></returns>
        private IResponseOutput GetToken(ResponseOutput<AuthLoginOutput> output)
        {
            if (!output.Success)
            {
                return ResponseOutput.NotOk(output.Msg);
            }

            var user = output.Data;
            var token = _userToken.Build(new[]
            {
                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
                new Claim(ClaimAttributes.UserName, user.UserName),
                new Claim(ClaimAttributes.UserNickName, user.NickName)
            });

            return ResponseOutput.Ok(new { token });
        }
 public override void OnResultExecuting(ResultExecutingContext context)
 {
     if (!context.ModelState.IsValid)
     {
         try
         {
             var logger        = (ILogger <ValidateInputAttribute>)context.HttpContext.RequestServices.GetService(typeof(ILogger <ValidateInputAttribute>));
             var errorMessages = context.ModelState.Values.First().Errors.Select(a => a.ErrorMessage);
             logger.LogError(string.Join(",", errorMessages));
             context.Result = new JsonResult(ResponseOutput.NotOk(errorMessages.First()));
         }
         catch
         {
             context.Result = new StatusCodeResult(StatusCodes.Status500InternalServerError);
         }
     }
 }
        public async Task <IResponseOutput> Login(AuthLoginInput input)
        {
            var sw = new Stopwatch();

            sw.Start();
            var res = (await _authService.LoginAsync(input)) as IResponseOutput;

            sw.Stop();

            #region 添加登录日志
            var loginLogAddInput = new LoginLogAddInput()
            {
                CreatedUserName     = input.UserName,
                ElapsedMilliseconds = sw.ElapsedMilliseconds,
                Status = res.Success,
                Msg    = res.Msg
            };

            AuthLoginOutput user = null;
            if (res.Success)
            {
                user = (res as IResponseOutput <AuthLoginOutput>).Data;
                loginLogAddInput.CreatedUserId = user.Id;
                loginLogAddInput.RealName      = user.Name;
            }

            await _loginLogService.AddAsync(loginLogAddInput);

            #endregion

            if (!res.Success)
            {
                return(res);
            }

            #region 生成token信息
            var token = _userToken.Build(new[]
            {
                new Claim(ClaimAttributes.UserId, user.Id.ToString()),
                new Claim(ClaimAttributes.UserName, user.UserName),
                new Claim(ClaimAttributes.UserRealName, user.Name)
            });
            #endregion

            return(ResponseOutput.Ok(new { token }));
        }
        private Payment UpdatePaymentFromResponse(ResponseOutput response)
        {
            var payment = _context.Payment.Where(x => x.TxnId == response.TxnId).First();

            payment.Success = int.Parse(response.Success);
            //payment.TxnId = response.TxnId;
            payment.ClientInfo         = response.ClientInfo;
            payment.ResponseText       = response.ResponseText;
            payment.AmountSettlemen    = response.AmountSettlement;
            payment.cardName           = response.CardName;
            payment.cardNumber         = response.CardNumber;
            payment.dateExpiry         = response.DateExpiry;
            payment.cardHolderName     = response.CardHolderName;
            payment.currencySettlement = response.CurrencySettlement;
            payment.currencyInput      = response.CurrencyInput;
            payment.txnMac             = response.TxnMac;
            return(payment);
        }
        public async Task<IResponseOutput> PageAsync(PageInput<UserEntity> input)
        {
            var list = await _userRepository.Select
            .WhereDynamicFilter(input.DynamicFilter)
            .Count(out var total)
            .OrderByDescending(true, a => a.Id)
            .IncludeMany(a => a.Roles.Select(b => new RoleEntity{ Name = b.Name }))
            .Page(input.CurrentPage, input.PageSize)
            .ToListAsync();

            var data = new PageOutput<UserListOutput>()
            {
                List = _mapper.Map<List<UserListOutput>>(list),
                Total = total
            };

            return ResponseOutput.Ok(data);
        }
        public void OnException(ExceptionContext context)
        {
            string message;

            if (_env.IsProduction())
            {
                message = Enums.StatusCodes.Status500InternalServerError.ToDescription();
            }
            else
            {
                message = context.Exception.Message;
            }

            _logger.LogError(context.Exception, "");
            var data = ResponseOutput.NotOk(message);

            context.Result = new InternalServerErrorResult(data);
        }
        public async Task <IResponseOutput> ListAsync(string key, DateTime?start, DateTime?end)
        {
            if (end.HasValue)
            {
                end = end.Value.AddDays(1);
            }

            var data = await _permissionRepository
                       .WhereIf(key.NotNull(), a => a.Path.Contains(key) || a.Label.Contains(key))
                       .WhereIf(start.HasValue && end.HasValue, a => a.CreatedTime.Value.BetweenEnd(start.Value, end.Value))
                       .OrderBy(a => a.ParentId)
                       .OrderBy(a => a.Sort)
                       .ToListAsync(a => new PermissionListOutput {
                ApiPath = a.Api.Path
            });

            return(ResponseOutput.Ok(data));
        }
Exemple #16
0
        public async Task <IResponseOutput> GetUserInfoAsync()
        {
            if (string.IsNullOrEmpty(User?.Id))
            {
                return(ResponseOutput.NotOk("未登录!"));
            }

            //用户信息
            var user = await _userRepo.FindByIdAsync(User.Id);

            var rolePerList = _rolePermissionRepo.Query.Where(c => c.RoleId == user.RoleId);
            var rolePerIds  = rolePerList.Select(x => x.PermissionId);

            //用户菜单
            var menus = await _permissionRepo.Query
                        .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
                        .Where(a => rolePerIds.Contains(a.Id)
                               )
                        .OrderBy(a => a.ParentId)
                        .OrderBy(a => a.Sort)
                        .Select(a => new
            {
                a.Id,
                a.ParentId,
                a.Path,
                ViewPath = a.ViewPath,
                a.Label,
                a.Icon,
                a.Opened,
                a.Closable,
                a.Hidden,
                a.NewWindow,
                a.External
            }).ToListAsync();

            //用户权限点
            var permissions = await _permissionRepo.Query
                              .Where(a => new[] { PermissionType.Api, PermissionType.Dot }.Contains(a.Type))
                              .Where(a => rolePerIds.Contains(a.Id)
                                     )
                              .Select(a => a.Code).ToListAsync();

            return(ResponseOutput.Ok(new { user, menus, permissions }));
        }
Exemple #17
0
        public async Task <IResponseOutput> GetVerifyCodeAsync(string lastKey)
        {
            var img = VerifyCodeHelper.GetBase64String(out string code);

            //删除上次缓存的验证码
            if (lastKey.NotNull())
            {
                await _cache.DelAsync(lastKey);
            }

            //写入Redis
            var guid = Guid.NewGuid().ToString("N");
            var key  = string.Format(CacheKey.VerifyCodeKey, guid);
            await _cache.SetAsync(key, code, TimeSpan.FromMinutes(5));

            var data = new { key = guid, img };

            return(ResponseOutput.Ok(data));
        }
Exemple #18
0
        public ResponseOutput AddQuestion(ICollection <QuestionViewModel> qtions)
        {
            if (qtions == null || qtions.Count == 0)
            {
                return(new ResponseOutput
                {
                    Success = false,
                    Message = "Object null"
                });
            }

            var response = new ResponseOutput();

            try
            {
                var questions = new List <Qtions>();
                foreach (var qtion in qtions)
                {
                    var temp = new Qtions
                    {
                        Id       = 0,
                        ContentQ = qtion.ContentQ,
                        Answer1  = qtion.Answer1,
                        Answer2  = qtion.Answer2,
                        Answer3  = qtion.Answer3,
                        Answer4  = qtion.Answer4,
                        Part     = qtion.Part,
                        TopicId  = qtion.TopicId
                    };
                    questions.Add(temp);
                }
                _repository.InsertRange(questions);
                UnitOfWork.SaveChanges();
                response.Success = true;
            }
            catch (Exception ex)
            {
                response.Success = false;
                response.Message = ex.Message;
            }

            return(response);
        }
Exemple #19
0
        public async Task <IResponseOutput> DeleteAsync(long id)
        {
            //删除角色权限
            await _rolePermissionRepository.Where(a => a.Role.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除用户角色
            await _userRoleRepository.Where(a => a.User.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除用户
            await _userRepository.Where(a => a.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除角色
            await _roleRepository.Where(a => a.TenantId == id).DisableGlobalFilter("Tenant").ToDelete().ExecuteAffrowsAsync();

            //删除租户
            await _tenantRepository.DeleteAsync(id);

            return(ResponseOutput.Ok());
        }
Exemple #20
0
        public async Task <IResponseOutput> UpdateAsync(DictionaryUpdateInput input)
        {
            if (!(input?.Id > 0))
            {
                return(ResponseOutput.NotOk());
            }

            var entity = await _dictionaryRepository.GetAsync(input.Id);

            if (!(entity?.Id > 0))
            {
                return(ResponseOutput.NotOk("Êý¾Ý×ֵ䲻´æÔÚ£¡"));
            }

            _mapper.Map(input, entity);
            await _dictionaryRepository.UpdateAsync(entity);

            return(ResponseOutput.Ok());
        }
Exemple #21
0
        public async Task <IResponseOutput> UpdateAsync(string id, UserUpdateInput input)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(ResponseOutput.NotOk());
            }

            var user = await _userRepo.FindByIdAsync(id);

            if (string.IsNullOrWhiteSpace(id))
            {
                return(ResponseOutput.NotOk("用户不存在!"));
            }

            _mapper.Map(input, user);
            await _userRepo.UpdateAsync(user);

            return(ResponseOutput.Ok());
        }
        public async Task <IResponseOutput> AssignAsync(PermissionAssignInput input)
        {
            //分配权限的时候判断角色是否存在
            var exists = await _roleRepository.Select.WhereDynamic(input.RoleId).AnyAsync();

            if (!exists)
            {
                return(ResponseOutput.NotOk("该角色不存在或已被删除,请刷新角色列表"));
            }

            //查询角色权限
            var permissionIds = await _rolePermissionRepository.Select.Where(d => d.RoleId == input.RoleId).ToListAsync(m => m.PermissionId);

            //批量删除权限
            var deleteIds = permissionIds.Where(d => !input.PermissionIds.Contains(d));

            if (deleteIds.Count() > 0)
            {
                await _rolePermissionRepository.DeleteAsync(m => m.RoleId == input.RoleId && deleteIds.Contains(m.PermissionId));
            }

            //批量插入权限
            var insertRolePermissions = new List <RolePermissionEntity>();
            var insertPermissionIds   = input.PermissionIds.Where(d => !permissionIds.Contains(d));

            if (insertPermissionIds.Count() > 0)
            {
                foreach (var permissionId in insertPermissionIds)
                {
                    insertRolePermissions.Add(new RolePermissionEntity()
                    {
                        RoleId       = input.RoleId,
                        PermissionId = permissionId,
                    });
                }
                await _rolePermissionRepository.InsertAsync(insertRolePermissions);
            }

            //清除权限
            await _cache.DelByPatternAsync(CacheKey.UserPermissions);

            return(ResponseOutput.Ok());
        }
Exemple #23
0
        public async Task <IResponseOutput> PageAsync(PageInput <OprationLogEntity> input)
        {
            var userName = input.Filter?.CreatedUserName;

            var list = await _oprationLogRepository.Select
                       .WhereIf(userName.NotNull(), a => a.CreatedUserName.Contains(userName))
                       .Count(out var total)
                       .OrderByDescending(true, c => c.Id)
                       .Page(input.CurrentPage, input.PageSize)
                       .ToListAsync <OprationLogListOutput>();

            var data = new PageOutput <OprationLogListOutput>()
            {
                List  = list,
                Total = total
            };

            return(ResponseOutput.Ok(data));
        }
Exemple #24
0
        /// <summary>
        /// 更新角色
        /// </summary>
        /// <param name="id"></param>
        /// <param name="dto"></param>
        /// <returns></returns>
        public async Task <IResponseOutput> UpdateRoleAsync(string id, RoleSaveDto dto)
        {
            if (string.IsNullOrEmpty(id))
            {
                return(ResponseOutput.NotOk("无数据"));
            }

            var data = await _roleRepo.FindByIdAsync(id);

            if (string.IsNullOrWhiteSpace(id))
            {
                return(ResponseOutput.NotOk("用户不存在!"));
            }

            ObjectMapper.Map(dto, data);
            await _roleRepo.UpdateAsync(data);

            return(ResponseOutput.Ok());
        }
Exemple #25
0
        public async Task <IResponseOutput> PageAsync(PageInput <LoginLogEntity> input)
        {
            var userName = input.Filter?.CreatedUserName;

            var list = _loginLogRepository.Query
                       .Where(a => a.CreatedUserName.Contains(userName))
                       .OrderByDescending(c => c.Id)
                       .Skip((input.CurrentPage.GetValueOrDefault() - 1) * input.PageSize.GetValueOrDefault()).Take(input.PageSize.GetValueOrDefault());



            var data = new PageOutput <LoginLogListOutput>()
            {
                List  = ObjectMapper.MapList <LoginLogEntity, LoginLogListOutput>(list.ToList()), //list.ToList().MapTo<List<LoginLogEntity>, List<LoginLogListOutput>>(),
                Total = list.Count()
            };

            return(ResponseOutput.Ok(data));
        }
Exemple #26
0
        public async Task <IResponseOutput> UpdateAsync(TenantUpdateInput input)
        {
            if (!(input?.Id > 0))
            {
                return(ResponseOutput.NotOk());
            }

            var entity = await _tenantRepository.GetAsync(input.Id);

            if (!(entity?.Id > 0))
            {
                return(ResponseOutput.NotOk("租户不存在!"));
            }

            Mapper.Map(input, entity);
            await _tenantRepository.UpdateAsync(entity);

            return(ResponseOutput.Ok());
        }
Exemple #27
0
        public async Task <IResponseOutput> PageAsync(PageInput <RoleEntity> input)
        {
            var key = input.Filter?.Name;

            var list = await _roleRepository.Select
                       .WhereIf(key.NotNull(), a => a.Name.Contains(key))
                       .Count(out var total)
                       .OrderByDescending(true, c => c.Id)
                       .Page(input.CurrentPage, input.PageSize)
                       .ToListAsync <RoleListOutput>();

            var data = new PageOutput <RoleListOutput>()
            {
                List  = list,
                Total = total
            };

            return(ResponseOutput.Ok(data));
        }
        public async Task <IResponseOutput> GetUserInfoAsync()
        {
            if (!(_user?.Id > 0))
            {
                return(ResponseOutput.NotOk("未登录!"));
            }

            var user = await _userRepository.Select.WhereDynamic(_user.Id)
                       .ToOneAsync(m => new {
                m.NickName,
                m.UserName,
                m.Avatar
            });

            //获取菜单
            var menus = await _permissionRepository.Select
                        .Where(a => new[] { PermissionType.Group, PermissionType.Menu }.Contains(a.Type))
                        .Where(a =>
                               _rolePermissionRepository.Select
                               .InnerJoin <UserRoleEntity>((b, c) => b.RoleId == c.RoleId && c.UserId == _user.Id)
                               .Where(b => b.PermissionId == a.Id)
                               .Any()
                               )
                        .OrderBy(a => a.ParentId)
                        .OrderBy(a => a.Sort)
                        .ToListAsync(a => new
            {
                a.Id,
                a.ParentId,
                a.Path,
                ViewPath = a.View.Path,
                a.Label,

                a.Icon,
                a.Opened,
                a.Closable,
                a.Hidden,
                a.NewWindow,
                a.External
            });

            return(ResponseOutput.Ok(new { user, menus }));
        }
Exemple #29
0
        public async Task <IResponseOutput> UpdateAsync(RoleUpdateInput input)
        {
            if (!(input?.Id > 0))
            {
                return(ResponseOutput.NotOk());
            }

            var entity = await _roleRepository.GetAsync(input.Id);

            if (!(entity?.Id > 0))
            {
                return(ResponseOutput.NotOk("½ÇÉ«²»´æÔÚ£¡"));
            }

            _mapper.Map(input, entity);
            await _roleRepository.UpdateAsync(entity);

            return(ResponseOutput.Ok());
        }
Exemple #30
0
        /// <summary>
        /// 上传单文件
        /// </summary>
        /// <param name="file"></param>
        /// <param name="config"></param>
        /// <param name="args"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IResponseOutput <FileInfo> > UploadAsync(IFormFile file, FileUploadConfig config, object args, CancellationToken cancellationToken = default)
        {
            var res = new ResponseOutput <FileInfo>();

            if (file == null || file.Length < 1)
            {
                return(res.NotOk("请上传文件!"));
            }

            //格式限制
            if (!config.ContentType.Contains(file.ContentType))
            {
                return(res.NotOk("文件格式错误"));
            }

            //大小限制
            if (!(file.Length <= config.MaxSize))
            {
                return(res.NotOk("文件过大"));
            }

            var fileInfo = new FileInfo(file.FileName, file.Length)
            {
                UploadPath  = config.UploadPath,
                RequestPath = config.RequestPath
            };

            var dateTimeFormat = config.DateTimeFormat.NotNull() ? DateTime.Now.ToString(config.DateTimeFormat) : "";
            var format         = config.Format.NotNull() ? StringHelper.Format(config.Format, args) : "";

            fileInfo.RelativePath = Path.Combine(dateTimeFormat, format).ToPath();

            if (!Directory.Exists(fileInfo.FileDirectory))
            {
                Directory.CreateDirectory(fileInfo.FileDirectory);
            }

            fileInfo.SaveName = $"{IdWorkerHelper.GenId64()}.{fileInfo.Extension}";

            await SaveAsync(file, fileInfo.FilePath, cancellationToken);

            return(res.Ok(fileInfo));
        }