直打ち禁止とは?
instagram風アプリなどの作成時に、投稿者のみ、編集や削除ができるようにすることです。
current_user
などで view
のみを制御してもURLに直接 https:///XXX/edit
などを打ち込むと投稿者以外のアカウントでも編集できてしまいます。これを出来なくすることを直打ち禁止といいます。
前提
railsで devise
を導入していること。
実装方法
application_controller
に、before_actionメゾットを追記します。
before_action :configure_permitted_parameters, if: :devise_controller?
次に、直打ち禁止させたいcontrollerページに以下を追記します。
今回は post_controller.rb
という名前の controller
ページに追記していきます。
before_action :authenticate_user!
before_action :ensure_correct_user, { only: [:edit, :update, :destroy] }
authenticate_user!
はログインしているユーザーのみ使えるようにするメゾットです。(devise
で使えるようになるヘルパーメソッド)
before_action :ensure_correct_user
を追記し、 { only: [:XXX] }
に直打ち禁止したいアクションを追記します。今回は edit
, update
, destroy
を追記しました。
また、同じcontrollerページ(今回は post_controller.rb
)の private
より上に下記のコードを追記します。
def ensure_correct_user
@post = Post.find_by(id: params[:id])
return unless @post.user_id != current_user.id
redirect_to posts_path
end
投稿したユーザーとログインしているユーザーのidが違うとき、 posts_path
にリダイレクトするようになります。