【发布时间】:2015-02-09 20:19:49
【问题描述】:
我正在使用 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
但这没有用。我可以通过类似的操作限制通过视图访问表单,但我认为这不完全安全?
谢谢
【问题讨论】: