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.
154 lines
3.5 KiB
TypeScript
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,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
};
|