, * navigation: list * }>, * agent: ?array{ * id: int, * admin_site_id: int, * site_code: string, * path: string, * code: string, * name: string, * depth: int, * can_create_child_agent: bool, * can_create_player: bool * }, * is_super_admin: bool, * operational_permissions: list, * delegation_ceiling: list, * accessible_sites?: list * } */ public static function fromAdmin(AdminUser $admin): array { $fresh = $admin->fresh(); $permissionSlugs = $fresh->adminPermissionSlugs(); $agent = self::agentContext($fresh); $payload = [ 'id' => $fresh->id, 'username' => $fresh->username, 'nickname' => $fresh->name, 'email' => $fresh->email, 'permissions' => $permissionSlugs, 'navigation' => AdminAuthorizationRegistry::visibleNavigationItems($permissionSlugs, $fresh), 'agent' => $agent, 'is_super_admin' => $fresh->isSuperAdmin(), 'operational_permissions' => $permissionSlugs, 'delegation_ceiling' => AgentDelegationAuthorization::delegationLegacySlugsForAdminUser($fresh), ]; if ($agent === null) { $payload['accessible_sites'] = AdminUserSiteBindingPresenter::accessibleSitesFor($fresh); } return $payload; } /** * @return array{ * id: int, * admin_site_id: int, * site_code: string, * path: string, * code: string, * name: string, * depth: int, * can_create_child_agent: bool, * can_create_player: bool * }|null */ private static function agentContext(AdminUser $admin): ?array { if ($admin->isSuperAdmin()) { return null; } $node = $admin->primaryAgentNode(); if (! $node instanceof AgentNode) { return null; } $siteCode = AdminSite::query()->where('id', (int) $node->admin_site_id)->value('code'); $profile = AgentProfile::query()->where('agent_node_id', $node->id)->first(); return [ 'id' => (int) $node->id, 'admin_site_id' => (int) $node->admin_site_id, 'site_code' => is_string($siteCode) && $siteCode !== '' ? $siteCode : '', 'path' => (string) $node->path, 'code' => (string) $node->code, 'name' => (string) $node->name, 'depth' => (int) $node->depth, 'can_create_child_agent' => $profile === null || $profile->can_create_child_agent, 'can_create_player' => $profile === null || $profile->can_create_player, ]; } }