Je suggère de créer un contrôleur qui limite l'accès aux téléchargements. L'astuce consiste à servir le fichier via un contrôleur, pas directement à partir d'Apache. Je suppose que vous utilisez RestfulAuthentication et Paperclip ici:
C'est le modèle (une photo qui a une image en pièce jointe)
class Photo < ActiveRecord::Base
belongs_to :user
has_attached_file :image, #:styles => {:thumbnail => "100x100#", :large => "800x600>"},
:path => ":rails_root/assets/:attachment/:id_partition/:style/:basename.:extension",
:url => "/assets/:userid/:attachment/:id/:style"
end
Notez l'attribut url qui, en combinaison avec l'itinéraire ci-dessous , forcera l'accès à l'image via un contrôleur et non directement à partir du répertoire public. Notez également l'attribut: path qui spécifie un répertoire de ressources privées au lieu de celui public par défaut.
map.assets 'assets/:userid/:attachment/:id/:style', :controller => 'assets', :action => 'get', :conditions => {:method => :get }
Maintenant, c'est le contrôleur simple qui exige que l'utilisateur soit connecté, vérifie l'ID utilisateur et envoie le fichier approprié à l'utilisateur.
class AssetsController < ApplicationController
before_filter :login_required
def get
if current_user.id == params[:userid].to_i
@photo = Photo.find params[:id]
send_file @photo.image.path(params[:style]), :type => @photo.image_content_type, :disposition => 'inline'
else
render :nothing => true
end
end
end
Vous devez également spécifier :x_sendfile => true
dans send_file pour améliorer les performances en laissant Apache prendre la souche de servir effectivement le fichier une fois que le contrôleur a approuvé.
C'est fantastique! Merci pour votre instruction en profondeur. Mon esprit est certainement plus reposé en sachant qu'il y a une limite à qui peut télécharger quoi. Maintenant, cette entreprise PaperClip, en termes simples, une fois installé intercepterait «toutes» les URL est-ce l'histoire?- (Si je me souviens bien, bien que je ne me souvienne pas où, j'ai lu un article ou peut-être un eBook qui mentionne le contrôleur + les actions des applications de Rails sont vos seules possibilités pour les URLs, n'est-ce pas? Merci encore! –
hmmm Je ne suis pas sûr de ce que vous voulez dire Je vous suggère de commencer lentement avec une simple application de rails, en le construisant progressivement RestfulAuthentication consiste à amener les utilisateurs à s'inscrire, se connecter, se déconnecter et s'assurer que certaines pages sont seulement Paperclip est un plugin pour la gestion des téléchargements de fichiers, qui consiste essentiellement à stocker le fichier et à gérer les métadonnées qui s'y rapportent (chemin d'accès, etc.). , taille, type) dans votre base de données. 210 Le point crucial de la solution est que le contrôleur des actifs – ideasasylum