1
0
Fork 0
polaris-task-force/src/collections/game/GameVehicles.ts
Z8MB1E 653caa8064 feat(rbac): migrate collection access controls to RBAC permissions
Replace legacy isDeveloper/isAdmin/hasRoles checks with
hasPermission/requirePermission across all collections. Add roleDocs
relationship to Users, enlistmentDate to Profiles, and field-level
intel_excerpt permission gate on Profiles. Auto-generated payload-types
updated to reflect the new Roles collection and roleDocs field.
2026-08-19 19:47:51 -04:00

154 lines
3.5 KiB
TypeScript

import { CollectionConfig } from "payload";
import { requirePermission } from "@/utils/access-control/hasPermission";
export const GameVehicles: CollectionConfig = {
slug: "game-vehicles",
admin: {
group: "Game",
useAsTitle: "name",
},
access: {
read: ({ req }) => !!req.user,
create: requirePermission("game-vehicles:create"),
update: requirePermission("game-vehicles:update"),
delete: requirePermission("game-vehicles:delete"),
},
fields: [
{
name: "name",
type: "text",
required: true,
admin: {
description: "Display name or callsign for this vehicle instance.",
},
},
{
name: "type",
type: "relationship",
relationTo: "vehicles",
required: true,
admin: {
description: "The vehicle type/template this instance is based on.",
},
},
{
name: "deployedAt",
type: "relationship",
relationTo: "game-structures",
admin: {
description: "The structure where this vehicle is currently stationed. Null if in transit.",
},
},
{
name: "faction",
type: "relationship",
relationTo: "factions",
admin: {
description: "The faction that owns this vehicle.",
},
},
{
name: "status",
type: "select",
options: [
{ label: "Idle", value: "idle" },
{ label: "Assigned", value: "assigned" },
{ label: "In Transit", value: "in_transit" },
{ label: "Damaged", value: "damaged" },
{ label: "Destroyed", value: "destroyed" },
],
defaultValue: "idle",
required: true,
},
{
name: "currentFuel",
type: "number",
required: true,
defaultValue: 0,
admin: {
description: "Current fuel level. Must be between 0 and the vehicle type's fuel capacity.",
},
},
{
name: "currentHealth",
type: "number",
required: true,
admin: {
description: "Current health. Must be between 0 and the vehicle type's max health.",
},
},
{
name: "storedResources",
type: "array",
fields: [
{
name: "resource",
type: "relationship",
relationTo: "resources",
required: true,
},
{
name: "amount",
type: "number",
required: true,
min: 1,
},
{
name: "gridX",
type: "number",
required: true,
min: 0,
},
{
name: "gridY",
type: "number",
required: true,
min: 0,
},
{
name: "rotated",
type: "checkbox",
defaultValue: false,
},
],
},
{
name: "voidStorage",
type: "array",
admin: {
description: "Items displaced by grid resizing.",
},
fields: [
{
name: "resource",
type: "relationship",
relationTo: "resources",
required: true,
},
{
name: "amount",
type: "number",
required: true,
min: 1,
},
{
name: "gridX",
type: "number",
required: true,
min: 0,
},
{
name: "gridY",
type: "number",
required: true,
min: 0,
},
{
name: "rotated",
type: "checkbox",
defaultValue: false,
},
],
},
],
};