1
0
Fork 0
polaris-task-force/src/permissions/index.ts

1012 lines
33 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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: "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: "admin:maps:manage", label: "Manage Admin Page" },
],
},
{
group: "Map Features",
permissions: [
{ value: "map-roads:read", label: "Read Roads" },
{ value: "admin:map-roads:manage", label: "Manage Roads Admin Page" },
{ value: "map-zones:read", label: "Read Zones" },
{ value: "admin:map-zones:manage", label: "Manage Zones Admin Page" },
{ value: "resource-nodes:read", label: "Read 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" },
],
},
// ---- 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",
"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",
"admin:maps:manage",
"map-roads:read",
"admin:map-roads:manage",
"map-zones:read",
"admin:map-zones:manage",
"resource-nodes:read",
"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",
"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);
}