fix: ( permissions) accept payments:manage for luggage charges

This commit is contained in:
Abubeker Yasin
2026-09-05 09:23:22 +03:00
parent b899037151
commit 70b1f75158
3 changed files with 12 additions and 5 deletions

View File

@@ -22,7 +22,14 @@ import { PASSENGER_PERMS } from '../../seed/passenger-permissions.registry';
* included — could raise a charge.
*/
const CanCharge = () =>
PassengerStaff([PASSENGER_PERMS.excessBaggage.charge, PASSENGER_PERMS.bookings.manage, PASSENGER_PERMS.admin]);
PassengerStaff([
PASSENGER_PERMS.excessBaggage.charge,
// Same shape as the supplementary-charge guard in payments.controller.ts: both bill a
// passenger and send them a pay link, so whoever manages payments can do either.
PASSENGER_PERMS.payments.manage,
PASSENGER_PERMS.bookings.manage,
PASSENGER_PERMS.admin,
]);
class UpsertBaggageAllowanceDto {
@IsString() seatClassId: string;

View File

@@ -10,7 +10,7 @@ import Modal from '@/components/ui/Modal';
import { excessBaggageApi, apiClient, bookingsApi } from '@/lib/api';
import { formatDateTime, formatCurrency } from '@/lib/utils';
import { useAuthStore } from '@/lib/auth-store';
import { useWritePermission } from '@/lib/use-permission';
import { useAnyPermission, useWritePermission } from '@/lib/use-permission';
import { PermissionGuard } from '@/components/layout/PermissionGuard';
import { PERMS } from '@/lib/permissions';
@@ -26,7 +26,7 @@ function ExcessBaggagePageContent() {
const queryClient = useQueryClient();
// Logging or resending a luggage charge bills the passenger and sends a pay link.
const canCharge = useWritePermission(PERMS.excessBaggage.charge, PERMS.bookings.manage);
const canCharge = useAnyPermission([PERMS.excessBaggage.charge, PERMS.payments.manage, PERMS.bookings.manage, PERMS.admin]);
const [filters, setFilters] = useState({ status: '', bookingRef: '', dateFrom: '', dateTo: '', page: '1' });
const [showExtraFilters, setShowExtraFilters] = useState(false);
const user = useAuthStore((s) => s.user);

View File

@@ -16,7 +16,7 @@ import { formatDateTime, formatCurrency, formatDateTimeShort } from '@/lib/utils
import { useAuthStore } from '@/lib/auth-store';
import { PermissionGuard } from '@/components/layout/PermissionGuard';
import { PERMS } from '@/lib/permissions';
import { usePermission, useWritePermission, useDeletePermission } from '@/lib/use-permission';
import { useAnyPermission, useDeletePermission, usePermission, useWritePermission } from '@/lib/use-permission';
function TicketsPageContent() {
const [filters, setFilters] = useState({ search: '', status: '', originStationId: '', destinationStationId: '', departureDate: '', arrivalDate: '', dateFrom: '', dateTo: '', coachId: '' });
@@ -76,7 +76,7 @@ function TicketsPageContent() {
const canEditTicket = useWritePermission(PERMS.tickets.edit, PERMS.tickets.manage);
const canDelete = useDeletePermission(PERMS.tickets.delete);
// Logging luggage bills the passenger and sends a pay link, so it is its own grant.
const canLogBaggage = useWritePermission(PERMS.excessBaggage.charge, PERMS.bookings.manage);
const canLogBaggage = useAnyPermission([PERMS.excessBaggage.charge, PERMS.payments.manage, PERMS.bookings.manage, PERMS.admin]);
const canBoard = useWritePermission(PERMS.tickets.board, PERMS.tickets.manage);
const { data, isLoading, error } = useQuery({