0
我正在使用RoR 4和Devise gem進行用戶驗證。我希望用戶能夠編輯他們自己的內容,而不是其他人的內容。 authenticate_user方法似乎只能確保用戶在可以編輯內容之前登錄。但是另一個用戶可以註冊並編輯其他人的內容。只允許用戶編輯自己的內容
我的控制器看起來像:
class PrayersController < ApplicationController
before_action :find_prayer, only: [:show, :edit, :updated, :destroy]
before_action :authenticate_user!, except: [:index, :show]
def index
@prayers = Prayer.all.order("created_at DESC")
end
def show
end
def new
@prayer = current_user.prayers.build
end
def edit
end
def create
@prayer = current_user.prayers.build(prayer_params)
if @prayer.save
redirect_to @prayer, notice: "Successfully created prayer"
else
render 'new'
end
end
def update
@prayer = Prayer.find_by_id(params[:id])
if @prayer.update(prayer_params)
redirect_to @prayer, notice: "Prayer was successfully updated"
else
render 'edit'
end
end
def destroy
@prayer.destroy
redirect_to root_path
end
private
def prayer_params
params.require(:prayer).permit(:title, :body)
end
def find_prayer
@prayer = Prayer.find(params[:id])
end
end
我試圖讓自己的before_action看起來是這樣的:
def own_prayer
if !current_user == Prayer.current_user
redirect_to @prayer, notice: "You cannot edit this prayer"
end
end
但沒有奏效。我可以通過類似的操作通過視圖限制對錶單的訪問,但我不認爲這是完全安全的?
謝謝
非常感謝你。這會在我的prayers_controller的更新方法中進行嗎? – Tom 2015-02-09 22:47:28
我想你也需要限制編輯方法,所以你可以在上面的代碼中添加'before_filter own_prayer,只有:[:edit,:update]'方法。然後,從更新方法 – 2015-02-10 03:52:03
中刪除'@prayer = Prayer.find_by_id(params [:id]) '這就像一種享受。 – Tom 2015-02-10 10:48:22