Ich würde vorschlagen, einen Controller zu erstellen, der den Zugriff auf die Downloads beschränkt. Der Trick besteht darin, die Datei über einen Controller zu liefern, nicht direkt von Apache. Ich gehe davon aus, dass Sie hier RestfulAuthentication und Büroklammer verwenden:
Dies ist das Modell (ein Foto, das ein Bild Anlage hat)
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
Beachten Sie die URL-Attribut mit der Route, die, in Kombination unter , erzwingen Sie den Zugriff auf das Image über einen Controller und nicht direkt aus dem öffentlichen Verzeichnis. Beachten Sie auch das Pfadattribut, das anstelle des öffentlichen Standardverzeichnisses ein privates Verzeichnis angibt.
map.assets 'assets/:userid/:attachment/:id/:style', :controller => 'assets', :action => 'get', :conditions => {:method => :get }
Nun, dies ist die einfache Steuerung, die den Benutzer eingeloggt sein erfordert, prüft die Benutzer-ID und sendet die entsprechende Datei an den Benutzer zurück.
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
Sie sollten auch :x_sendfile => true
in send_file geben Sie die Leistung, indem sie Apache nimmt die Belastung tatsächlich dazu dient, die Datei zu verbessern, sobald der Controller sie genehmigt hat.
Das ist fantastisch! Vielen Dank für Ihre ausführliche Anleitung. Mein Verstand ist sicherlich ruhiger, da er weiß, dass es eine Beschränkung gibt, wer was herunterladen darf. Jetzt würde dieses PaperClip-Geschäft, in einfachen Worten einmal installiert, "alle" URLs abfangen, ist das die Geschichte?- (Wenn ich mich recht erinnere, obwohl ich mich nicht erinnern kann, wo ich gelesen habe, ein Artikel oder vielleicht ein eBook, das erwähnt hat, dass Rails 'Apps Controller + Aktionen Ihre einzigen Möglichkeiten für URLs sind, ist das richtig? Vielen Dank nochmal! –
hmmm ... nicht ganz sicher, was du meinst. Ich würde vorschlagen, dass du langsam mit einer einfachen Rails-App beginnst und sie langsam aufbaust. Bei RestfulAuthentication geht es darum, dass Benutzer sich registrieren, anmelden, abmelden und sicherstellen, dass bestimmte Seiten nur vorhanden sind sichtbar für eingeloggte Benutzer.Es bietet den login_required Filter und current_user Variable, die Sie oben sehen .. Paperclip ist ein Plugin für die Verwaltung von Datei-Uploads.Im Wesentlichen übernimmt es die Aufgabe der Speicherung der Datei und Verwalten der Metadaten darüber (dh Pfad , Größe, Typ) in Ihrer Datenbank. Der Hauptpunkt der Lösung ist der Asset-Controller – ideasasylum