【问题标题】:How prevent deleting image from ActiveStorage by another user?如何防止其他用户从 ActiveStorage 中删除图像?
【发布时间】:2022-07-29 08:28:19
【问题描述】:

我有拥有产品的用户。用户可以使用 ActiveStorage 上传产品图片。为了上传图片,我使用了单独的控制器 ImageController,只有一个删除操作,而且我的路由中有路由​​:

  delete "image/:id/purge", to: "images#delete", as: "purge_image"

所以在我的数据库中,我有 ActiveStorage 表、用户表和产品表。用户 has_many products 和 Product belongs_to User。据我了解,用户与 ActiveStorage 表没有任何连接。如果他想使用直接路由删除图像,如何防止另一个用户删除图像?或者如何找出是哪个用户上传的图片?感谢您的帮助。

【问题讨论】:

  • "用户与ActiveStorage表没有任何连接" 如果用户和图像之间没有连接,如何知道哪个用户上传了哪个图像?我认为你不能。你需要一些联系。因此,您需要先添加一个连接。

标签: ruby-on-rails ruby rails-activestorage


【解决方案1】:

简单的方法是在你的控制器中是这样的

def delete
  ActiveStorage::Attachment
    .where(record_id: current_user&.product_ids)
    .find(params[:id])
    .purge
end

这样您将仅在当前用户产品范围内找到附件

find 如果该用户没有此类图像,方法将引发 404 错误

或者您可以使用一些授权 gem(ActionPolicy、pundit、cancancan 等)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 2019-06-02
    • 2019-04-28
    • 2021-10-12
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多