似乎无法使用Rails隐藏某些图像。我搜索得很高,我搜索得很低,我已经问过了。得到了一些赞成,但没有坚实的回应。没有教程在线。没有。关于如何在assets文件夹中存储图像的教程包,但没有任何内容可以使图像保密。
假设我有三种类型的用户,typeA
,typeB
和typeC
。让我们说我有三种类型的图像。所以数据库模式如下:
图像
=> ["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 )上执行此操作
答案 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
问题解决了!