隐藏某些用户的某些图像

时间:2014-03-23 14:04:21

标签: ruby-on-rails nginx

似乎无法使用Rails隐藏某些图像。我搜索得很高,我搜索得很低,我已经问过了。得到了一些赞成,但没有坚实的回应。没有教程在线。没有。关于如何在assets文件夹中存储图像的教程包,但没有任何内容可以使图像保密。

假设我有三种类型的用户,typeAtypeBtypeC。让我们说我有三种类型的图像。所以数据库模式如下:

图像

=> ["image_path","blob","type"]

用户

=> ["name","type"]

我想要的是用户只能请求以下内容:

的typeA

  

可以仅查看类型为A的图片

     

无法查看类型为B的图片

     

无法仅查看类型为C的图片

的TypeB

  

可以仅查看类型为B的图片

     

无法查看类型为的图片

     

无法仅查看类型为C的图片

typeC

  

可以仅查看类型为C的图片

     

无法查看类型为的图片

     

无法仅查看类型为B的图片

是的,我可以用两种类型的用户和图片给你一个例子,但我真的想确保你理解这个问题;我想到的实际系统将有数百types

我的意思是,我可以在视图中执行此操作:

<% if current_user.type == image.type do %>
   <%= image_tag image.path #=> <img src="/assets/typaAImage.jpg" alt="..." class="..."> %>
<% end %>

但是甚至不是用户的人都可以简单地请求/assets/typeAImage.jpg.并获取图片,所以我真的不知道该怎么做。

我可以阻止人们浏览公共资源目录吗?除了应用程序本身之外,是否停止对目录的所有访问?

如果没有,我该如何将图片设为私有?

我想要答案:

在Heroku上执行此操作。 (postgres)

在VPS(postgres, nginx )上执行此操作

1 个答案:

答案 0 :(得分:3)

我个人所做的事:

将私有图片保存在特殊文件夹中,而不是public

通过Rails服务,而不是通过Nginx / Apache服务。像这样:

class MyController < ApplicationController
  def get_secret_photo
    if current_user.has_the_right_permissions?
      send_file(File.join(Rails.root, 'special_folder', 'image_name.png'))
    else
      render status: :forbidden, nothing: true
    end
  end
end

问题解决了!