XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEServerManager

【Java】我的世界XFE服务器管理器

公开
关注 0 Fork 0 Star 0
UTF-8
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);
}