public async Task <Result <GateResponse> > Handle(GetGateRequest request, CancellationToken cancellationToken) { try { var user = await _userRepository.GetUserByEmail(request.RequestedBy); var access = await _userGateRepository.CheckAccess(request.Id, user.Id); var adminAccess = await _userGateRepository.CheckAdminAccess(request.Id, user.Id) || user.Role.Name == "Admin" || _gateRepository.IsAccountAdminOfTheGate(request.Id, user.Id); if (!access && user.Role.Name == "User" && !(_gateRepository.IsAccountAdminOfTheGate(request.Id, user.Id))) { return(Result <GateResponse> .AccessDenied("No access to this gate!")); } var gate = await _gateRepository.Get(request.Id); var response = CreateResponse(gate, adminAccess); return(Result <GateResponse> .Ok(response)); } catch (Exception e) { return(Result <GateResponse> .Failure(e.Message)); } }
public async Task <IActionResult> GateGate(int id) { var command = new GetGateRequest { Id = id }; command.RequestedBy = HttpContext.User.Identity.Name; var result = await _mediator.Send(command); return(StatusCodeResult(result)); }