如何仅允许登录用户查看图像

时间:2011-01-27 16:07:05

标签: ruby-on-rails security authlogic hotlinking

我有一个Ruby on Rails(2.2.2)应用程序,用户可以上传图像并将其标记为“已锁定”。这将把它们放在另一个文件夹中,而不是你没有标记它。普通上传文件夹是/ uploads / Image,锁定文件夹是/ uploads / vip / Image。我想只锁定VIP文件夹,这样你就无法将链接发送给某人并在不登录的情况下查看它。我猜逻辑必须重定向到应用程序,而不是盲目地提供图像。问题是怎么样的?

在rails中创建模型不是一种选择,因为这些图像是由fckeditor上传的,只是在没有进一步逻辑的情况下编写和链接。

2 个答案:

答案 0 :(得分:0)

如果您使用devise,请使用之前的过滤器,例如before_filter :authenticate_user!。如果用户未登录,这将重定向到登录页面。图像通过控制器操作提供。

答案 1 :(得分:0)

你可能不得不重新思考你的应用程序是如何设计的,因为没有任何方法(就这个n00b可以看到的)锁定某些路径而没有某个地方的图像模型。有一个 Rails fckeditor (链接)gem,它允许您在应用程序中将fckeditor与Rails模型和控制器完全集成。

这是我要做的。

  1. 在数据库迁移中创建一个“图像”模型和控制器,至少包含 user_id:integer protected:boolean, :default => false 字段。这样可以更轻松地直接链接到某些图像而不是其他图像,并跟踪谁上传图像。请务必在图片模型中设置 belongs_to :user 关系。
  2. 使用“has_many:images”关系设置您的用户模型,以便将用户与他们上传的照片联系起来。
  3. 使用Authlogic对用户进行身份验证,并要求某些网页让用户使用Authlogic提供的 before_filter :current_user 方法登录访问权。
  4. 使用 Paperclip 实施 rails-ckeditor gem,以允许用户编辑内容和上传照片。您可以将PaperClip配置为根据“图像”模型中指定的“受保护”字段将图像保存在“VIP”文件夹或普通文件夹中。
  5. 修改您的routes.rb文件以包含map.resources :images语句,这有助于为每张上传的照片创建完整的网址。
  6. 这应该足以让你走上正确的道路。如果你正确地实现了这一点,你应该能够让用户在fckeditor中上传照片,选择他们是受保护的还是没有“VIP”,这应该将照片保存到你指定的文件夹,并且只允许直接链接到非VIP照片以及其他要求用户登录/创建和帐户。祝你好运!

    〜丹