import type { SessionActor } from '../types';
export type Capability =
| 'status_read'
| 'player_read'
| 'player_message'
| 'player_safe_write'
| 'player_destructive_write'
| 'inventory_write'
| 'moderation_write'
| 'policy_edit'
| 'policy_publish'
| 'audit_read'
| 'settings_write'
| 'account_manage'
| 'console_execute'
| 'claim_read'
| 'claim_manage'
| 'maintenance_manage'
| 'trigger_read'
| 'trigger_write'
| 'menu_read'
| 'menu_write'
| 'economy_read'
| 'economy_manage'
| 'world_query'
| 'world_rollback';
const routeCapabilities: Record<string, Capability> = {
overview: 'status_read',
players: 'player_read',
triggers: 'trigger_read',
menus: 'menu_read',
economy: 'economy_read',
policies: 'policy_edit',
audit: 'audit_read',
console: 'console_execute',
settings: 'status_read',
moderation: 'audit_read',
maintenance: 'maintenance_manage',
claims: 'claim_read',
rollback: 'world_query',
};
export function hasCapability(actor: SessionActor | undefined, capability: Capability): boolean {
if (!actor) return false;
// The server currently grants owners every capability. Keeping this fallback also avoids
// locking an owner out when talking to an older server that omitted the permissions array.
return actor.roles.includes('owner') || actor.permissions.includes(capability);
}
export function canAccessRoute(actor: SessionActor | undefined, route: string): boolean {
const capability = routeCapabilities[route];
return capability === undefined || hasCapability(actor, capability);
}
import type { SessionActor } from '../types';
export type Capability =
| 'status_read'
| 'player_read'
| 'player_message'
| 'player_safe_write'
| 'player_destructive_write'
| 'inventory_write'
| 'moderation_write'
| 'policy_edit'
| 'policy_publish'
| 'audit_read'
| 'settings_write'
| 'account_manage'
| 'console_execute'
| 'claim_read'
| 'claim_manage'
| 'maintenance_manage'
| 'trigger_read'
| 'trigger_write'
| 'menu_read'
| 'menu_write'
| 'economy_read'
| 'economy_manage'
| 'world_query'
| 'world_rollback';
const routeCapabilities: Record<string, Capability> = {
overview: 'status_read',
players: 'player_read',
triggers: 'trigger_read',
menus: 'menu_read',
economy: 'economy_read',
policies: 'policy_edit',
audit: 'audit_read',
console: 'console_execute',
settings: 'status_read',
moderation: 'audit_read',
maintenance: 'maintenance_manage',
claims: 'claim_read',
rollback: 'world_query',
};
export function hasCapability(actor: SessionActor | undefined, capability: Capability): boolean {
if (!actor) return false;
// The server currently grants owners every capability. Keeping this fallback also avoids
// locking an owner out when talking to an older server that omitted the permissions array.
return actor.roles.includes('owner') || actor.permissions.includes(capability);
}
export function canAccessRoute(actor: SessionActor | undefined, route: string): boolean {
const capability = routeCapabilities[route];
return capability === undefined || hasCapability(actor, capability);
}