gpt4 book ai didi

ruby-on-rails-4 - 只允许用户编辑自己的内容

转载 作者:行者123 更新时间:2023-12-03 23:37:02 25 4
gpt4 key购买 nike

我正在使用 RoR 4 和 Devise gem 进行用户身份验证。我希望用户能够编辑自己的内容,而不是其他任何人的内容。 authenticate_user 方法似乎只能确保用户在编辑内容之前已登录。但是另一个用户可以注册并编辑其他人的内容。

我的 Controller 看起来像:

    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

但这并没有奏效。我可以使用类似的操作通过 View 限制对表单的访问,但我认为这并不完全安全?

谢谢

最佳答案

我猜你在 Prayer 类上没有类方法 current_user 。您的用户模型中似乎也有 has_many :prayers。因此,要获得祈祷的用户,您需要在 Prayer 实例变量上调用 user 方法。

应该是这样的:

@prayer = Prayer.find params[:id]

unless current_user == @prayer.user
redirect_to(@prayer, notice: "You cannot edit this prayer") and return
end

如果您需要更棘手的限制规则,请使用 cancan gem

关于ruby-on-rails-4 - 只允许用户编辑自己的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28407260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com