accessRulesRepository = $accessRulesRepository; $this->accessRulesValidator = $accessRulesValidator; } /** * @throws ForbiddenException * @throws ValidationException */ public function handle(WP_REST_Request $data): WP_REST_Response { Sanitizer::verifyNonce($data->get_header('X-WP-Nonce')); $body = $data->get_json_params(); if (!is_array($body) || !isset($body['rules']) || !is_array($body['rules'])) { throw new ValidationException( BackendStrings::getExceptionStrings()['rules_payload_required'] ); } $normalized = $this->accessRulesValidator->validateAndNormalize($body['rules']); $previousUserIds = AccessRulesRoleCapabilitySynchronizer::extractUserIdsFromUserRules( $this->accessRulesRepository->getPayload()['rules'] ); $this->accessRulesRepository->saveRules($normalized); AccessRulesRoleCapabilitySynchronizer::syncFromRules($normalized, $previousUserIds); return new WP_REST_Response( [ 'message' => BackendStrings::getPermissionsStrings()['permissions_saved'], 'rules' => $normalized, ], 200 ); } }