Я работаю над обзором приложений. В этом приложении пользователи могут публиковать свой собственный проект и отзыв других пользователей. Но я столкнулся с этой ошибкой, когда другие пользователи пытаются редактировать свои обзоры. Редактировать проект разрешено только владельцам проектов. Но редактировать отзывы следует разрешить пользователям, написавшим свой отзыв.
Как я могу разделить эту аутентификацию?
/controllers/projects_controller.rb
class ProjectsController < ApplicationController
before_action :signed_in_user, only: [:new, :create, :edit, :update, :destroy]
before_action :set_project, only: [:show, :edit, :update]
before_action :correct_user, only: [:edit, :update]
def edit
end
def update
@project.attributes = create_params
if @project.save
redirect_to @project
else
render edit_project_path(id: @project.id)
end
end
private
def signed_in_user
unless user_signed_in?
redirect_to root_path
end
end
def set_project
@project = Project.find_by_id(params[:id])
end
def correct_user
unless current_user.projects.include?(@user)
redirect_to root_path
end
end
end
/controllers/reviews_controller.rb
class ReviewsController < ApplicationController
before_action :set_projectct, only: [:new, :create, :edit, :update]
before_action :set_review, only: [:edit, :update, :destroy]
before_action :correct_user, only: [:edit, :update]
def edit
end
def update
@review.attributes = create_params
if @reviews.save
redirect_to prokect_path(id: @review.project_id)
else
redirect_to project_path(id: @review.project_id)
end
end
def set_project
@project = Project.find_by_id(params[:project_id])
end
def set_review
@review = Review.find_by_id(params[:id])
end
def correct_user
unless current_user.review.include?(@review)
redirect_to root_path
end
end
end
routes.rb
resources :projects do
resources :reviews
end