public async Task Invoke(HttpContext context, FarmAppContext farmAppContext, ILoggerDb loggerDb) { var originalBody = context.Response.Body; var responseBody = new MemoryStream(); context.Response.Body = responseBody; context.Request.EnableBuffering(); Log log = new Log(); if (int.TryParse(context.User.Claims?.FirstOrDefault(c => c.Type == "UserId")?.Value, out var userId)) { log.UserId = userId; } if (int.TryParse(context.User.Claims?.FirstOrDefault(c => c.Type == "RoleId")?.Value, out var roleId)) { log.RoleId = roleId; } try { log = await GetLogAsync(context, context.Request.Headers, context.Request.Body, log); loggerDb.WriteRequest(log); if (await HandleErrorAutorizationAsync(context, farmAppContext, log)) { await _next.Invoke(context); } } catch (Exception ex) { log.Exception = ex.ToString(); await HandleExceptionAsync(context, ex); } finally { log = await GetLogAsync(context, context.Response.Headers, context.Response.Body, log); loggerDb.WriteResponse(log); await responseBody.CopyToAsync(originalBody); responseBody.Dispose(); } }
private async Task <bool> HandleErrorAutorizationAsync(HttpContext context, FarmAppContext farmAppContext, Log log) { var method = await farmAppContext.ApiMethodRoles.Include(i => i.ApiMethod).Where(x => x.ApiMethod.HttpMethod == log.HttpMethod && x.ApiMethod.PathUrl == log.PathUrl).AsNoTracking().ToListAsync(); if (!method.Any()) { await WriteStatusAndBody(context, 404, "Метод не найден!"); return(false); } if (method.Any(x => x.ApiMethod.IsNeedAuthentication == true)) { if (method.FirstOrDefault(x => x.RoleId == log.RoleId)?.IsDeleted ?? true == true) { await WriteStatusAndBody(context, 403, "Доступ запрещен!"); return(false); } } return(true); }
public void Configure(IApplicationBuilder app, FarmAppContext farmAppContext) { app.UseDeveloperExceptionPage(); app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("./v1/swagger.json", "FarmApp V1"); }); app.UseHttpsRedirection(); app.UseRouting(); app.UseCookiePolicy(new CookiePolicyOptions { MinimumSameSitePolicy = SameSiteMode.Strict, HttpOnly = HttpOnlyPolicy.Always, Secure = CookieSecurePolicy.Always }); app.UseDefaultFiles(); app.UseStaticFiles(); app.UseAuthentication(); app.UseAuthorization(); app.UseCors(builder => builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()); app.UseMiddleware <ErrorHandlingMiddleware>(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); farmAppContext.Database.Migrate(); }
public VendorsController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public PharmaciesController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public DosageFormsController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public RegionTypesController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public ApiMethodsController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public UsersController(FarmAppContext farmAppContext, IMapper mapper, IOptions <AppSettings> appSettings) { _farmAppContext = farmAppContext; _mapper = mapper; _appSettings = appSettings.Value; }
public RoleController(FarmAppContext farmAppContext) { _farmAppContext = farmAppContext; }
public ChartsController(FarmAppContext farmAppContext) { _farmAppContext = farmAppContext; }
public StocksController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public UserController(FarmAppContext farmAppContext) { _farmAppContext = farmAppContext; }
public CodeAthTypesController(FarmAppContext farmAppContext, IMapper mapper) { _farmAppContext = farmAppContext; _mapper = mapper; }
public LoggerDb(FarmAppContext farmAppContext) { _farmAppContext = farmAppContext; }