requirePermission($request, 'api.access'); $user = $this->getUser($request); $resolver = $this->getResolver(); $isSuperAdmin = $this->isSuperAdmin($user); return ApiResponse::create($resolver->resolve($user, $isSuperAdmin)); } /** * PATCH /dashboard/layout — Save the current user's dashboard layout. */ public function saveUserLayout(ServerRequestInterface $request): ResponseInterface { $this->requirePermission($request, 'api.access'); $body = $this->getRequestBody($request); if (!is_array($body)) { throw new ValidationException('Request body must be a JSON object.'); } $user = $this->getUser($request); $resolver = $this->getResolver(); $resolver->saveUserLayout($user, $body); return ApiResponse::create($resolver->resolve($user, $this->isSuperAdmin($user))); } /** * PATCH /dashboard/site-layout — Save the site-wide default dashboard layout. * * Super-admin only. Widgets marked invisible here are hidden for all users * and cannot be re-enabled per-user. */ public function saveSiteLayout(ServerRequestInterface $request): ResponseInterface { $user = $this->getUser($request); if (!$this->isSuperAdmin($user)) { throw new ForbiddenException('Only super-admins can edit the site dashboard layout.'); } $body = $this->getRequestBody($request); if (!is_array($body)) { throw new ValidationException('Request body must be a JSON object.'); } $resolver = $this->getResolver(); $resolver->saveSiteLayout($body); return ApiResponse::create($resolver->resolve($user, true)); } private function getResolver(): DashboardLayoutResolver { return new DashboardLayoutResolver( $this->grav, new PermissionResolver($this->grav['permissions']), ); } }