diff --git a/src/collections/server/RespawnTickets.ts b/src/collections/server/RespawnTickets.ts index 054400f..1a3d893 100644 --- a/src/collections/server/RespawnTickets.ts +++ b/src/collections/server/RespawnTickets.ts @@ -1,4 +1,5 @@ import { CollectionConfig } from "payload"; +import { requirePermission } from "@/utils/access-control/hasPermission"; /** * Per-player respawn ticket balances. Tickets are awarded automatically when a @@ -8,17 +9,17 @@ import { CollectionConfig } from "payload"; * missions and are served to the Arma 3 mod via the arma-bridge tickets * route, which loads them into the game at mission start. * - * Written internally by the settlement lib (overrideAccess); the admin panel - * is read-only so balance changes always have a settlement behind them. + * Written internally by the settlement lib (overrideAccess); GMs can also + * adjust balances manually in the admin panel. */ export const RespawnTickets: CollectionConfig = { slug: "respawn-tickets", admin: { group: "Server", useAsTitle: "user", defaultColumns: ["user", "balance"] }, access: { - read: ({ req }) => !!req.user, - create: () => false, - update: () => false, - delete: () => false, + read: requirePermission("respawn-tickets:read"), + create: requirePermission("respawn-tickets:create"), + update: requirePermission("respawn-tickets:update"), + delete: requirePermission("respawn-tickets:delete"), }, fields: [ { name: "user", type: "relationship", relationTo: "users", required: true, unique: true, index: true }, @@ -28,7 +29,7 @@ export const RespawnTickets: CollectionConfig = { defaultValue: 0, admin: { description: - "Accumulated respawn tickets (1 per yes-attended op, 0.5 tentative, 0.25 no). Maintained by settlement; read-only.", + "Accumulated respawn tickets (1 per yes-attended op, 0.5 tentative, 0.25 no). Settlement adjusts automatically; GMs can adjust manually.", }, }, ], diff --git a/src/payload-types.ts b/src/payload-types.ts index d9aa19c..f261907 100644 --- a/src/payload-types.ts +++ b/src/payload-types.ts @@ -1870,6 +1870,11 @@ export interface Role { | 'mod-lists:update' | 'mod-lists:delete' | 'admin:mod-lists:manage' + | 'respawn-tickets:create' + | 'respawn-tickets:read' + | 'respawn-tickets:update' + | 'respawn-tickets:delete' + | 'admin:respawn-tickets:manage' | 'game-servers:create' | 'game-servers:read' | 'game-servers:update' @@ -4295,7 +4300,7 @@ export interface RespawnTicket { id: number; user: number | User; /** - * Accumulated respawn tickets (1 per yes-attended op, 0.5 tentative, 0.25 no). Maintained by settlement; read-only. + * Accumulated respawn tickets (1 per yes-attended op, 0.5 tentative, 0.25 no). Settlement adjusts automatically; GMs can adjust manually. */ balance?: number | null; updatedAt: string; @@ -9248,6 +9253,18 @@ export interface GameRule { */ tickIntervalHintMinutes?: number | null; }; + /** + * When off, the Zone Pressure feature is hidden from the Operations feed (the overview card and the AAR section). + */ + zonePressureEnabled?: boolean | null; + /** + * When off, the Personnel > Statistics page and its navigation entry are hidden. + */ + statisticsEnabled?: boolean | null; + /** + * When off, the Helpdesk page and its navigation entry are hidden. + */ + helpdeskEnabled?: boolean | null; updatedAt?: string | null; createdAt?: string | null; } @@ -9340,6 +9357,9 @@ export interface GameRulesSelect { coldStartObservations?: T; tickIntervalHintMinutes?: T; }; + zonePressureEnabled?: T; + statisticsEnabled?: T; + helpdeskEnabled?: T; updatedAt?: T; createdAt?: T; globalType?: T; diff --git a/src/permissions/index.ts b/src/permissions/index.ts index 0c57ff3..5e84d70 100644 --- a/src/permissions/index.ts +++ b/src/permissions/index.ts @@ -526,6 +526,16 @@ export const PERMISSION_GROUPS: PermissionGroup[] = [ { value: "admin:mod-lists:manage", label: "Manage Admin Page" }, ], }, + { + group: "Respawn Tickets", + permissions: [ + { value: "respawn-tickets:create", label: "Create" }, + { value: "respawn-tickets:read", label: "Read" }, + { value: "respawn-tickets:update", label: "Update" }, + { value: "respawn-tickets:delete", label: "Delete" }, + { value: "admin:respawn-tickets:manage", label: "Manage Admin Page" }, + ], + }, { group: "Game Servers", permissions: [ @@ -907,6 +917,11 @@ export const ALL_PERMISSION_VALUES = PERMISSION_GROUPS.flatMap((g) => "mod-lists:update", "mod-lists:delete", "admin:mod-lists:manage", + "respawn-tickets:create", + "respawn-tickets:read", + "respawn-tickets:update", + "respawn-tickets:delete", + "admin:respawn-tickets:manage", "game-servers:create", "game-servers:read", "game-servers:update",