> $args Parâmetros aceitos (schema). */ protected function route( string $path, string $methods, callable $callback, callable $permission, array $args = array() ): void { foreach ( $args as $name => $schema ) { // Valida e converte cada parâmetro de acordo com o schema declarado. $args[ $name ] += array( 'validate_callback' => 'rest_validate_request_arg', 'sanitize_callback' => 'rest_sanitize_request_arg', ); } register_rest_route( self::REST_NAMESPACE, $path, array( 'methods' => $methods, 'callback' => $callback, 'permission_callback' => fn( \WP_REST_Request $request ) => $this->guard( $request, $permission ), 'args' => $args, ) ); } /** * Verificação comum a todas as rotas. * * @param \WP_REST_Request $request Requisição. * @param callable(\WP_REST_Request): bool $permission Verificação própria da rota. * @return true|\WP_Error */ private function guard( \WP_REST_Request $request, callable $permission ) { if ( ! is_user_logged_in() ) { return new \WP_Error( 'resgata_rest_not_logged_in', __( 'Faça login para continuar.', 'resgata-pet' ), array( 'status' => 401 ) ); } if ( ! current_user_can( Capabilities::PANEL ) || true !== $permission( $request ) ) { return new \WP_Error( 'resgata_rest_forbidden', __( 'Você não tem permissão para fazer isso.', 'resgata-pet' ), array( 'status' => 403 ) ); } return true; } }