http-api/src/Application/Aircrafts/Queries/GetAircraftsPage/GetAircraftsPageQueryAuthorizer.cs
cuqmbr 0508c89c2d
All checks were successful
/ build (push) Successful in 7m55s
/ tests (push) Successful in 40s
/ build-docker (push) Successful in 8m27s
add authorization requirements
2025-06-03 18:00:07 +03:00

43 lines
1.4 KiB
C#

using cuqmbr.TravelGuide.Application.Common.Authorization;
using cuqmbr.TravelGuide.Application.Common.Persistence;
using cuqmbr.TravelGuide.Application.Common.Services;
using MediatR.Behaviors.Authorization;
namespace cuqmbr.TravelGuide.Application.Aircrafts.Queries.GetAircraftsPage;
public class GetAircraftsPageQueryAuthorizer :
AbstractRequestAuthorizer<GetAircraftsPageQuery>
{
private readonly SessionUserService _sessionUserService;
private readonly UnitOfWork _unitOfWork;
public GetAircraftsPageQueryAuthorizer(
SessionUserService sessionUserService,
UnitOfWork unitOfWork)
{
_sessionUserService = sessionUserService;
_unitOfWork = unitOfWork;
}
public override void BuildPolicy(GetAircraftsPageQuery request)
{
UseRequirement(new MustBeAuthenticatedRequirement
{
IsAuthenticated = _sessionUserService.IsAuthenticated
});
var company = _unitOfWork.CompanyRepository
.GetOneAsync(
e => e.Guid == request.CompanyGuid, e => e.Account,
CancellationToken.None)
.Result;
UseRequirement(new MustBeObjectOwnerOrAdminRequirement
{
UserRoles = _sessionUserService.Roles,
RequiredGuid = company?.Account.Guid,
UserGuid = _sessionUserService.Guid
});
}
}