/** * Permission universe — the single source of truth for every permission * recognized by the dynamic RBAC system. * * Permissions are hardcoded here in application code. The Payload admin panel * reads this list when rendering the permission selector on the `roles` * collection. Roles are dynamic (created/edited in the admin panel), but the * set of assignable permissions is NOT — it can only grow by adding entries * here. * * Format: `{collection-slug}:{create|read|update|delete}` for collection CRUD, * plus domain-specific special permissions for feature areas that don't map * cleanly to CRUD (e.g. `logistics:manage`, `discord:announce`). */ export interface PermissionOption { /** Machine-readable key, e.g. `"users:create"`. */ value: string; /** Human-readable label, e.g. `"Create"`. */ label: string | string[]; } export interface PermissionGroup { /** Group label shown as a header in the admin UI, e.g. `"Users"`. */ group: string; /** Permissions within this group. */ permissions: PermissionOption[]; } // --------------------------------------------------------------------------- // Permission groups // --------------------------------------------------------------------------- export const PERMISSION_GROUPS: PermissionGroup[] = [ { group: "System", permissions: [{ value: "system:admin-access", label: "Superuser Tier (user management, notification oversight, final approval states)" }], }, // ---- Media --------------------------------------------------------------- { group: "Media", permissions: [ { value: "media:create", label: "Create" }, { value: "media:read", label: "Read" }, { value: "media:update", label: "Update" }, { value: "media:delete", label: "Delete" }, { value: "admin:media:manage", label: "Manage Admin Page" }, ], }, // ---- Users --------------------------------------------------------------- { group: "Users", permissions: [ { value: "users:create", label: "Create Users" }, { value: "users:read", label: "Read Users" }, { value: "users:update", label: "Update Users" }, { value: "users:delete", label: "Delete Users" }, { value: "users:unlock", label: "Unlock User Accounts" }, { value: "users:assign-roles", label: "Assign Roles to Users" }, { value: "admin:users:manage", label: "Manage Admin Page" }, ], }, { group: "Roles", permissions: [ { value: "roles:create", label: "Create" }, { value: "roles:read", label: "Read" }, { value: "roles:update", label: "Update" }, { value: "roles:delete", label: "Delete" }, { value: "admin:roles:manage", label: "Manage Admin Page" }, ], }, { group: "Ranks", permissions: [ { value: "ranks:create", label: "Create" }, { value: "ranks:read", label: "Read" }, { value: "ranks:update", label: "Update" }, { value: "ranks:delete", label: "Delete" }, { value: "admin:ranks:manage", label: "Manage Admin Page" }, ], }, { group: "Profiles", permissions: [ { value: "profiles:create", label: "Create" }, { value: "profiles:read", label: "Read" }, { value: "profiles:update", label: "Update" }, { value: "profiles:delete", label: "Delete" }, { value: "admin:profiles:manage", label: "Manage Admin Page" }, ], }, { group: "Awards", permissions: [ { value: "awards:create", label: "Create" }, { value: "awards:read", label: "Read" }, { value: "awards:update", label: "Update" }, { value: "awards:delete", label: "Delete" }, { value: "admin:awards:manage", label: "Manage Admin Page" }, ], }, { group: "Qualifications", permissions: [ { value: "qualifications:create", label: "Create" }, { value: "qualifications:read", label: "Read" }, { value: "qualifications:update", label: "Update" }, { value: "qualifications:delete", label: "Delete" }, { value: "admin:qualifications:manage", label: "Manage Admin Page" }, ], }, { group: "Assignments", permissions: [ { value: "assignments:create", label: "Create" }, { value: "assignments:read", label: "Read" }, { value: "assignments:update", label: "Update" }, { value: "assignments:delete", label: "Delete" }, { value: "admin:assignments:manage", label: "Manage Admin Page" }, ], }, { group: "Assignment Transfers", permissions: [ { value: "assignment-transfers:create", label: "Create" }, { value: "assignment-transfers:read", label: "Read" }, { value: "assignment-transfers:update", label: "Update" }, { value: "assignment-transfers:delete", label: "Delete" }, { value: "admin:assignment-transfers:manage", label: "Manage Admin Page" }, ], }, { group: "Experience", permissions: [ { value: "experience:create", label: "Create" }, { value: "experience:read", label: "Read" }, { value: "experience:update", label: "Update" }, { value: "experience:delete", label: "Delete" }, { value: "admin:experience:manage", label: "Manage Admin Page" }, ], }, { group: "User Notifications", permissions: [ { value: "user-notifications:create", label: "Create" }, { value: "user-notifications:read", label: "Read" }, { value: "user-notifications:update", label: "Update" }, { value: "user-notifications:delete", label: "Delete" }, { value: "admin:user-notifications:manage", label: "Manage Admin Page" }, ], }, { group: "Evaluations", permissions: [ { value: "evaluations:create", label: "Create" }, { value: "evaluations:read", label: "Read" }, { value: "evaluations:update", label: "Update" }, { value: "evaluations:delete", label: "Delete" }, { value: "admin:evaluations:manage", label: "Manage Admin Page" }, ], }, // ---- Intelligence -------------------------------------------------------- { group: "Missions", permissions: [ { value: "missions:create", label: "Create" }, { value: "missions:read", label: "Read" }, { value: "missions:update", label: "Update" }, { value: "missions:delete", label: "Delete" }, { value: "missions:read-sensitive", label: "Read Sensitive Fields (server passwords)" }, { value: "admin:missions:manage", label: "Manage Admin Page" }, ], }, { group: "Mission Attendances", permissions: [ { value: "mission-attendances:create", label: "Create" }, { value: "mission-attendances:read", label: "Read" }, { value: "mission-attendances:update", label: "Update" }, { value: "mission-attendances:delete", label: "Delete" }, { value: "admin:mission-attendances:manage", label: "Manage Admin Page" }, ], }, { group: "Mission Role Sign-Ups", permissions: [ { value: "mission-role-signups:create", label: "Create" }, { value: "mission-role-signups:read", label: "Read" }, { value: "mission-role-signups:update", label: "Update" }, { value: "mission-role-signups:delete", label: "Delete" }, { value: "admin:mission-role-signups:manage", label: "Manage Admin Page" }, ], }, { group: "Campaigns", permissions: [ { value: "campaigns:create", label: "Create" }, { value: "campaigns:read", label: "Read" }, { value: "campaigns:update", label: "Update" }, { value: "campaigns:delete", label: "Delete" }, { value: "admin:campaigns:manage", label: "Manage Admin Page" }, ], }, { group: "Campaigns", permissions: [{ value: "campaigns:manage", label: "Manage Campaigns (owner bypass)" }], }, { group: "Factions", permissions: [ { value: "factions:create", label: "Create" }, { value: "factions:read", label: "Read" }, { value: "factions:update", label: "Update" }, { value: "factions:delete", label: "Delete" }, { value: "admin:factions:manage", label: "Manage Admin Page" }, ], }, { group: "Technologies", permissions: [ { value: "technologies:create", label: "Create" }, { value: "technologies:read", label: "Read" }, { value: "technologies:update", label: "Update" }, { value: "technologies:delete", label: "Delete" }, { value: "admin:technologies:manage", label: "Manage Admin Page" }, ], }, // ---- Logistics ----------------------------------------------------------- { group: "Assets", permissions: [ { value: "assets:create", label: "Create" }, { value: "assets:read", label: "Read" }, { value: "assets:update", label: "Update" }, { value: "assets:delete", label: "Delete" }, { value: "admin:assets:manage", label: "Manage Admin Page" }, ], }, { group: "Resources", permissions: [ { value: "resources:create", label: "Create" }, { value: "resources:read", label: "Read" }, { value: "resources:update", label: "Update" }, { value: "resources:delete", label: "Delete" }, { value: "admin:resources:manage", label: "Manage Admin Page" }, ], }, { group: "Vehicles", permissions: [ { value: "vehicles:create", label: "Create" }, { value: "vehicles:read", label: "Read" }, { value: "vehicles:update", label: "Update" }, { value: "vehicles:delete", label: "Delete" }, { value: "admin:vehicles:manage", label: "Manage Admin Page" }, ], }, { group: "Structures", permissions: [ { value: "structures:create", label: "Create" }, { value: "structures:read", label: "Read" }, { value: "structures:update", label: "Update" }, { value: "structures:delete", label: "Delete" }, { value: "admin:structures:manage", label: "Manage Admin Page" }, ], }, { group: "Shipments", permissions: [ { value: "shipments:create", label: "Create" }, { value: "shipments:read", label: "Read" }, { value: "shipments:update", label: "Update" }, { value: "shipments:delete", label: "Delete" }, { value: "admin:shipments:manage", label: "Manage Admin Page" }, ], }, // ---- Banking ------------------------------------------------------------- { group: "Bank Accounts", permissions: [ { value: "bank-accounts:create", label: "Create" }, { value: "bank-accounts:read", label: "Read" }, { value: "bank-accounts:update", label: "Update" }, { value: "bank-accounts:delete", label: "Delete" }, { value: "admin:bank-accounts:manage", label: "Manage Admin Page" }, ], }, { group: "Bank Transactions", permissions: [ { value: "bank-transactions:create", label: "Create" }, { value: "bank-transactions:read", label: "Read" }, { value: "bank-transactions:update", label: "Update" }, { value: "bank-transactions:delete", label: "Delete" }, { value: "admin:bank-transactions:manage", label: "Manage Admin Page" }, ], }, { group: "Ledger Entries", permissions: [ { value: "ledger-entries:create", label: "Create" }, { value: "ledger-entries:read", label: "Read" }, { value: "ledger-entries:update", label: "Update" }, { value: "ledger-entries:delete", label: "Delete" }, { value: "admin:ledger-entries:manage", label: "Manage Admin Page" }, ], }, // ---- Locker -------------------------------------------------------------- { group: "Locker Storages", permissions: [ { value: "locker-storages:create", label: "Create" }, { value: "locker-storages:read", label: "Read" }, { value: "locker-storages:update", label: "Update" }, { value: "locker-storages:delete", label: "Delete" }, { value: "admin:locker-storages:manage", label: "Manage Admin Page" }, ], }, { group: "Loadouts", permissions: [ { value: "loadouts:create", label: "Create" }, { value: "loadouts:read", label: "Read" }, { value: "loadouts:update", label: "Update" }, { value: "loadouts:delete", label: "Delete" }, { value: "admin:loadouts:manage", label: "Manage Admin Page" }, ], }, // ---- Market -------------------------------------------------------------- { group: "Market Listings", permissions: [ { value: "market-listings:create", label: "Create" }, { value: "market-listings:read", label: "Read" }, { value: "market-listings:update", label: "Update" }, { value: "market-listings:delete", label: "Delete" }, { value: "admin:market-listings:manage", label: "Manage Admin Page" }, ], }, { group: "Market Negotiations", permissions: [ { value: "market-negotiations:create", label: "Create" }, { value: "market-negotiations:read", label: "Read" }, { value: "market-negotiations:update", label: "Update" }, { value: "market-negotiations:delete", label: "Delete" }, { value: "admin:market-negotiations:manage", label: "Manage Admin Page" }, ], }, { group: "Market State", permissions: [ { value: "market-state:create", label: "Create" }, { value: "market-state:read", label: "Read" }, { value: "market-state:update", label: "Update" }, { value: "market-state:delete", label: "Delete" }, { value: "admin:market-state:manage", label: "Manage Admin Page" }, ], }, // ---- Helpdesk ------------------------------------------------------------ { group: "Projects", permissions: [ { value: "projects:create", label: "Create" }, { value: "projects:read", label: "Read" }, { value: "projects:update", label: "Update" }, { value: "projects:delete", label: "Delete" }, { value: "admin:projects:manage", label: "Manage Admin Page" }, ], }, { group: "Labels", permissions: [ { value: "labels:create", label: "Create" }, { value: "labels:read", label: "Read" }, { value: "labels:update", label: "Update" }, { value: "labels:delete", label: "Delete" }, { value: "admin:labels:manage", label: "Manage Admin Page" }, ], }, { group: "Sprints", permissions: [ { value: "sprints:create", label: "Create" }, { value: "sprints:read", label: "Read" }, { value: "sprints:update", label: "Update" }, { value: "sprints:delete", label: "Delete" }, { value: "admin:sprints:manage", label: "Manage Admin Page" }, ], }, { group: "Releases", permissions: [ { value: "releases:create", label: "Create" }, { value: "releases:read", label: "Read" }, { value: "releases:update", label: "Update" }, { value: "releases:delete", label: "Delete" }, { value: "admin:releases:manage", label: "Manage Admin Page" }, ], }, { group: "Tickets", permissions: [ { value: "tickets:create", label: "Create" }, { value: "tickets:read", label: "Read" }, { value: "tickets:update", label: "Update" }, { value: "tickets:delete", label: "Delete" }, { value: "admin:tickets:manage", label: "Manage Admin Page" }, ], }, { group: "Ticket Votes", permissions: [ { value: "ticket-votes:create", label: "Create" }, { value: "ticket-votes:read", label: "Read" }, { value: "ticket-votes:update", label: "Update" }, { value: "ticket-votes:delete", label: "Delete" }, { value: "admin:ticket-votes:manage", label: "Manage Admin Page" }, ], }, // ---- Game ---------------------------------------------------------------- { group: "Game Structures", permissions: [ { value: "game-structures:create", label: "Create" }, { value: "game-structures:read", label: "Read" }, { value: "game-structures:update", label: "Update" }, { value: "game-structures:delete", label: "Delete" }, { value: "admin:game-structures:manage", label: "Manage Admin Page" }, ], }, { group: "Game Vehicles", permissions: [ { value: "game-vehicles:create", label: "Create" }, { value: "game-vehicles:read", label: "Read" }, { value: "game-vehicles:update", label: "Update" }, { value: "game-vehicles:delete", label: "Delete" }, { value: "admin:game-vehicles:manage", label: "Manage Admin Page" }, ], }, { group: "Game NPCs", permissions: [ { value: "game-npcs:create", label: "Create" }, { value: "game-npcs:read", label: "Read" }, { value: "game-npcs:update", label: "Update" }, { value: "game-npcs:delete", label: "Delete" }, { value: "admin:game-npcs:manage", label: "Manage Admin Page" }, ], }, { group: "Game Hard Resources", permissions: [ { value: "game-hard-resources:create", label: "Create" }, { value: "game-hard-resources:read", label: "Read" }, { value: "game-hard-resources:update", label: "Update" }, { value: "game-hard-resources:delete", label: "Delete" }, { value: "admin:game-hard-resources:manage", label: "Manage Admin Page" }, ], }, { group: "Game Event Logs", permissions: [ { value: "game-event-logs:create", label: "Create" }, { value: "game-event-logs:read", label: "Read" }, { value: "game-event-logs:update", label: "Update" }, { value: "game-event-logs:delete", label: "Delete" }, { value: "admin:game-event-logs:manage", label: "Manage Admin Page" }, ], }, // ---- World --------------------------------------------------------------- { group: "Maps", permissions: [ { value: "maps:create", label: "Create" }, { value: "maps:read", label: "Read" }, { value: "maps:update", label: "Update" }, { value: "maps:delete", label: "Delete" }, { value: "maps:place", label: "Place Structures" }, { value: "admin:maps:manage", label: "Manage Admin Page" }, ], }, { group: "Map Features", permissions: [ { value: "map-roads:read", label: "Read Roads" }, { value: "map-roads:author", label: "Author Roads" }, { value: "admin:map-roads:manage", label: "Manage Roads Admin Page" }, { value: "map-zones:read", label: "Read Zones" }, { value: "map-zones:author", label: "Author Zones" }, { value: "admin:map-zones:manage", label: "Manage Zones Admin Page" }, { value: "resource-nodes:read", label: "Read Resource Nodes" }, { value: "resource-nodes:author", label: "Author Resource Nodes" }, { value: "admin:resource-nodes:manage", label: "Manage Resource Nodes Admin Page" }, ], }, { group: "Narrative Events", permissions: [ { value: "narrative-events:create", label: "Create" }, { value: "narrative-events:read", label: "Read" }, { value: "narrative-events:update", label: "Update" }, { value: "narrative-events:delete", label: "Delete" }, { value: "admin:narrative-events:manage", label: "Manage Admin Page" }, ], }, // ---- Server -------------------------------------------------------------- { group: "Mission Files", permissions: [ { value: "mission-files:create", label: "Create" }, { value: "mission-files:read", label: "Read" }, { value: "mission-files:update", label: "Update" }, { value: "mission-files:delete", label: "Delete" }, { value: "admin:mission-files:manage", label: "Manage Admin Page" }, ], }, { group: "Mod Lists", permissions: [ { value: "mod-lists:create", label: "Create" }, { value: "mod-lists:read", label: "Read" }, { value: "mod-lists:update", label: "Update" }, { value: "mod-lists:delete", label: "Delete" }, { 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: [ { value: "game-servers:create", label: "Create" }, { value: "game-servers:read", label: "Read" }, { value: "game-servers:update", label: "Update" }, { value: "game-servers:delete", label: "Delete" }, { value: "admin:game-servers:manage", label: "Manage Admin Page" }, ], }, { group: "Arma Sync Events", permissions: [ { value: "arma-sync-events:create", label: "Create" }, { value: "arma-sync-events:read", label: "Read" }, { value: "arma-sync-events:update", label: "Update" }, { value: "arma-sync-events:delete", label: "Delete" }, { value: "admin:arma-sync-events:manage", label: "Manage Admin Page" }, ], }, { group: "Arma Commands", permissions: [ { value: "arma-commands:create", label: "Create" }, { value: "arma-commands:read", label: "Read" }, { value: "arma-commands:update", label: "Update" }, { value: "arma-commands:delete", label: "Delete" }, { value: "admin:arma-commands:manage", label: "Manage Admin Page" }, ], }, { group: "Operation Events", permissions: [ { value: "operation-events:create", label: "Create" }, { value: "operation-events:read", label: "Read" }, { value: "operation-events:update", label: "Update" }, { value: "operation-events:delete", label: "Delete" }, { value: "admin:operation-events:manage", label: "Manage Admin Page" }, ], }, { group: "Operation Effects", permissions: [ { value: "operation-effects:create", label: "Create" }, { value: "operation-effects:read", label: "Read" }, { value: "operation-effects:update", label: "Update" }, { value: "operation-effects:delete", label: "Delete" }, { value: "admin:operation-effects:manage", label: "Manage Admin Page" }, ], }, { group: "Operation Reservations", permissions: [ { value: "operation-reservations:create", label: "Create" }, { value: "operation-reservations:read", label: "Read" }, { value: "operation-reservations:update", label: "Update" }, { value: "operation-reservations:delete", label: "Delete" }, { value: "admin:operation-reservations:manage", label: "Manage Admin Page" }, ], }, { group: "Operation Readiness", permissions: [ { value: "operation-readiness:create", label: "Create" }, { value: "operation-readiness:read", label: "Read" }, { value: "operation-readiness:update", label: "Update" }, { value: "operation-readiness:delete", label: "Delete" }, { value: "admin:operation-readiness:manage", label: "Manage Admin Page" }, ], }, { group: "Zone Pressure", permissions: [ { value: "zone-pressure:create", label: "Create" }, { value: "zone-pressure:read", label: "Read" }, { value: "zone-pressure:update", label: "Update" }, { value: "zone-pressure:delete", label: "Delete" }, { value: "admin:zone-pressure:manage", label: "Manage Admin Page" }, ], }, { group: "Announcements", permissions: [ { value: "announcements:create", label: "Create" }, { value: "announcements:read", label: "Read" }, { value: "announcements:update", label: "Update" }, { value: "announcements:delete", label: "Delete" }, { value: "admin:announcements:manage", label: "Manage Admin Page" }, ], }, { group: "Surveys", permissions: [ { value: "forms:create", label: "Create Surveys" }, { value: "forms:read", label: "Read Surveys" }, { value: "forms:update", label: "Update Surveys" }, { value: "forms:delete", label: "Delete Surveys" }, { value: "form-submissions:read", label: "Read Submissions" }, { value: "form-submissions:delete", label: "Delete Submissions" }, { value: "admin:forms:manage", label: "Manage Surveys Admin Page" }, { value: "admin:form-submissions:manage", label: "Manage Submissions Admin Page" }, ], }, // ---- Globals ------------------------------------------------------------- { group: "Game Rules (Global)", permissions: [ { value: "game-rules:read", label: "Read" }, { value: "game-rules:update", label: "Update" }, ], }, { group: "Shims (Global)", permissions: [ { value: "shims:read", label: "Read" }, { value: "shims:update", label: "Update" }, ], }, // ---- Special / Feature-area ---------------------------------------------- { group: "Logistics", permissions: [{ value: "logistics:manage", label: "Manage Logistics (manager bypass)" }], }, { group: "Intelligence", permissions: [ { value: "intelligence:manage", label: "Manage Intelligence (manager bypass)" }, { value: "profiles:intel_excerpt:update", label: ["Profile", "Intel Excerpt", "Update"] }, ], }, { group: "Banking", permissions: [{ value: "banking:manage", label: "Manage Banking (manager bypass)" }], }, { group: "Helpdesk", permissions: [{ value: "tickets:staff", label: "Staff Helpdesk Tickets" }], }, { group: "Discord Bot", permissions: [ { value: "discord:staff", label: "Bot Staff (isStaff)" }, { value: "discord:announce", label: "Post Announcements (/announce)" }, ], }, { group: "Minigames", permissions: [ { value: "custom-minefields:update", label: "Edit Any Custom Minefield" }, { value: "custom-minefields:delete", label: "Delete Custom Minefields" }, { value: "custom-minefield-scores:delete", label: "Delete Custom Minefield Scores" }, { value: "custom-radio-tests:update", label: "Edit Any Custom Radio Test" }, { value: "custom-radio-tests:delete", label: "Delete Custom Radio Tests" }, { value: "custom-radio-test-scores:delete", label: "Delete Custom Radio Test Scores" }, ], }, ]; // --------------------------------------------------------------------------- // Derived exports // --------------------------------------------------------------------------- /** Flat array of all permission value strings, as a const tuple for type inference. */ export const ALL_PERMISSION_VALUES = PERMISSION_GROUPS.flatMap((g) => g.permissions.map((p) => p.value), ) as unknown as readonly [ "system:admin-access", "media:create", "media:read", "media:update", "media:delete", "admin:media:manage", "users:create", "users:read", "users:update", "users:delete", "users:unlock", "users:assign-roles", "admin:users:manage", "roles:create", "roles:read", "roles:update", "roles:delete", "admin:roles:manage", "ranks:create", "ranks:read", "ranks:update", "ranks:delete", "admin:ranks:manage", "profiles:create", "profiles:read", "profiles:update", "profiles:delete", "admin:profiles:manage", "awards:create", "awards:read", "awards:update", "awards:delete", "admin:awards:manage", "qualifications:create", "qualifications:read", "qualifications:update", "qualifications:delete", "admin:qualifications:manage", "assignments:create", "assignments:read", "assignments:update", "assignments:delete", "admin:assignments:manage", "assignment-transfers:create", "assignment-transfers:read", "assignment-transfers:update", "assignment-transfers:delete", "admin:assignment-transfers:manage", "experience:create", "experience:read", "experience:update", "experience:delete", "admin:experience:manage", "user-notifications:create", "user-notifications:read", "user-notifications:update", "user-notifications:delete", "admin:user-notifications:manage", "evaluations:create", "evaluations:read", "evaluations:update", "evaluations:delete", "admin:evaluations:manage", "missions:create", "missions:read", "missions:update", "missions:delete", "missions:read-sensitive", "admin:missions:manage", "mission-attendances:create", "mission-attendances:read", "mission-attendances:update", "mission-attendances:delete", "admin:mission-attendances:manage", "mission-role-signups:create", "mission-role-signups:read", "mission-role-signups:update", "mission-role-signups:delete", "admin:mission-role-signups:manage", "campaigns:create", "campaigns:read", "campaigns:update", "campaigns:delete", "admin:campaigns:manage", "campaigns:manage", "factions:create", "factions:read", "factions:update", "factions:delete", "admin:factions:manage", "technologies:create", "technologies:read", "technologies:update", "technologies:delete", "admin:technologies:manage", "assets:create", "assets:read", "assets:update", "assets:delete", "admin:assets:manage", "resources:create", "resources:read", "resources:update", "resources:delete", "admin:resources:manage", "vehicles:create", "vehicles:read", "vehicles:update", "vehicles:delete", "admin:vehicles:manage", "structures:create", "structures:read", "structures:update", "structures:delete", "admin:structures:manage", "shipments:create", "shipments:read", "shipments:update", "shipments:delete", "admin:shipments:manage", "bank-accounts:create", "bank-accounts:read", "bank-accounts:update", "bank-accounts:delete", "admin:bank-accounts:manage", "bank-transactions:create", "bank-transactions:read", "bank-transactions:update", "bank-transactions:delete", "admin:bank-transactions:manage", "ledger-entries:create", "ledger-entries:read", "ledger-entries:update", "ledger-entries:delete", "admin:ledger-entries:manage", "locker-storages:create", "locker-storages:read", "locker-storages:update", "locker-storages:delete", "admin:locker-storages:manage", "loadouts:create", "loadouts:read", "loadouts:update", "loadouts:delete", "admin:loadouts:manage", "market-listings:create", "market-listings:read", "market-listings:update", "market-listings:delete", "admin:market-listings:manage", "market-negotiations:create", "market-negotiations:read", "market-negotiations:update", "market-negotiations:delete", "admin:market-negotiations:manage", "market-state:create", "market-state:read", "market-state:update", "market-state:delete", "admin:market-state:manage", "projects:create", "projects:read", "projects:update", "projects:delete", "admin:projects:manage", "labels:create", "labels:read", "labels:update", "labels:delete", "admin:labels:manage", "sprints:create", "sprints:read", "sprints:update", "sprints:delete", "admin:sprints:manage", "releases:create", "releases:read", "releases:update", "releases:delete", "admin:releases:manage", "tickets:create", "tickets:read", "tickets:update", "tickets:delete", "admin:tickets:manage", "ticket-votes:create", "ticket-votes:read", "ticket-votes:update", "ticket-votes:delete", "admin:ticket-votes:manage", "game-structures:create", "game-structures:read", "game-structures:update", "game-structures:delete", "admin:game-structures:manage", "game-vehicles:create", "game-vehicles:read", "game-vehicles:update", "game-vehicles:delete", "admin:game-vehicles:manage", "game-npcs:create", "game-npcs:read", "game-npcs:update", "game-npcs:delete", "admin:game-npcs:manage", "game-hard-resources:create", "game-hard-resources:read", "game-hard-resources:update", "game-hard-resources:delete", "admin:game-hard-resources:manage", "game-event-logs:create", "game-event-logs:read", "game-event-logs:update", "game-event-logs:delete", "admin:game-event-logs:manage", "maps:create", "maps:read", "maps:update", "maps:delete", "maps:place", "admin:maps:manage", "map-roads:read", "map-roads:author", "admin:map-roads:manage", "map-zones:read", "map-zones:author", "admin:map-zones:manage", "resource-nodes:read", "resource-nodes:author", "admin:resource-nodes:manage", "narrative-events:create", "narrative-events:read", "narrative-events:update", "narrative-events:delete", "admin:narrative-events:manage", "mission-files:create", "mission-files:read", "mission-files:update", "mission-files:delete", "admin:mission-files:manage", "mod-lists:create", "mod-lists:read", "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", "game-servers:delete", "admin:game-servers:manage", "arma-sync-events:create", "arma-sync-events:read", "arma-sync-events:update", "arma-sync-events:delete", "admin:arma-sync-events:manage", "arma-commands:create", "arma-commands:read", "arma-commands:update", "arma-commands:delete", "admin:arma-commands:manage", "operation-events:create", "operation-events:read", "operation-events:update", "operation-events:delete", "admin:operation-events:manage", "operation-effects:create", "operation-effects:read", "operation-effects:update", "operation-effects:delete", "admin:operation-effects:manage", "operation-reservations:create", "operation-reservations:read", "operation-reservations:update", "operation-reservations:delete", "admin:operation-reservations:manage", "operation-readiness:create", "operation-readiness:read", "operation-readiness:update", "operation-readiness:delete", "admin:operation-readiness:manage", "zone-pressure:create", "zone-pressure:read", "zone-pressure:update", "zone-pressure:delete", "admin:zone-pressure:manage", "game-rules:read", "game-rules:update", "shims:read", "shims:update", "announcements:create", "announcements:read", "announcements:update", "announcements:delete", "admin:announcements:manage", "forms:create", "forms:read", "forms:update", "forms:delete", "form-submissions:read", "form-submissions:delete", "admin:forms:manage", "admin:form-submissions:manage", "logistics:manage", "intelligence:manage", "profiles:intel_excerpt:update", "banking:manage", "tickets:staff", "discord:staff", "discord:announce", "custom-minefields:update", "custom-minefields:delete", "custom-minefield-scores:delete", "custom-radio-tests:update", "custom-radio-tests:delete", "custom-radio-test-scores:delete", ]; /** * Union type of every valid permission string. * Use this to type-check permission arguments at compile time. */ export type Permission = (typeof ALL_PERMISSION_VALUES)[number]; /** * Payload `select` field options, flattened with group-prefixed labels. * e.g. `{ label: "Users › Create Users", value: "users:create" }` */ export const permissionSelectOptions: { label: string; value: string }[] = PERMISSION_GROUPS.flatMap((g) => g.permissions.map((p) => { let label = p.label; if (Array.isArray(p.label)) label = p.label.join(" › "); return { label: `${g.group} › ${label}`, value: p.value, }; }), ); /** * Guard function — returns true if the given string is a valid permission. * Useful for runtime validation of permission strings from DB or API input. */ export function isPermission(value: string): value is Permission { return (ALL_PERMISSION_VALUES as readonly string[]).includes(value); }