在我的一个控制器中,我有这种方法:
def method_name
if current_user
@model = Model.find(params[:id])
if @model.destroy
flash.alert = 'Model deleted successfully'
redirect_to models_path
end
end
end
我检查是否有设备指定的current_user,然后才能删除@model。这在安全性方面是否安全且充足?
我真正做的只是检查current_user是否存在。那么有没有人可以"欺骗" current_user确实存在的系统,因此能够触发方法中包含的命令吗?
答案 0 :(得分:1)
您将获得一系列答案。但是如果您希望用户登录,那么只需在控制器顶部执行此操作:
before_filter :authenticate_user!
这是由设计提供的,并确保在允许任何控制器操作之前有登录用户。
如果你有简单的授权,那么很可能,尽管你要确保用户有权删除该对象。你可以用几种方法做到这一点。我最喜欢的是Pundit宝石。
您还可以检查用户是否拥有该对象,以便能够将其删除。该代码看起来像这样
@model = Model.find(params[:id)
if current_user.id == @model.user_id
# Rest of your destroy code
end