У меня есть Rails API с контроллером, который имеет before_action
в функции создания, которая проверяет, является ли current_user, создающий «вставку», также владельцем указанного room_id
в paste_params
.
Если current_user.rooms.find(params[:paste][:room_id]).user_id
не найден или если он найден, но не равен current_user.id
, сервер всегда возвращает 404.
Как я могу go сделать это вернуть 403 вместо 404? Поскольку эта проверка предназначена для определения того, является ли пользователь, создающий вставку, владельцем комнаты, к которой будет привязана вставка, если пользователь не является владельцем этой комнаты, это означает, что он не авторизован для создания вставки в эта комната.
Вот соответствующие части контроллера:
class Api::V1::PastesController < ApplicationController
before_action :check_room_owner, only: %i[create update destroy]
def create
paste = current_user.pastes.build(paste_params)
if paste.save
render json: PasteSerializer.new(paste).serializable_hash, status: :created
else
render json: { errors: paste.errors }, status: :unprocessable_entity
end
end
private
# Convert to 403 forbidden if not found
def check_room_owner
head :forbidden unless current_user.rooms.find(params[:paste][:room_id]).user_id === current_user.id
end
end
Ура!