2013-01-13 1 views
3

레일 프로젝트가 있습니다. 내 프로젝트에서 나는 서버 (레일 3 + 클립 + devise + cancan)에 이미지를로드한다. 파일에 대한 액세스를 제한하고 싶습니다 (예 : 원래 이미지는 관리자 만 볼 수 있습니다). 어떻게해야합니까?레일 앱에서 이미지 액세스 제한

답변

4

데이터베이스의 특성으로 제한하는 경우 한 가지 방법은 컨트롤러를 통해 이미지를 제공하는 것입니다. 가장 실적이 좋은 것은 아니지만 안전합니다.

나는 이것을 시도하지 않은,하지만 당신은

/images/picture_of_mickey_mouse.png

같은 URL에서 이미지를 제공한다면 다음 파일 이름 속성으로 /images에 응답하여 응용 프로그램의 경로를 만들 수 있으며, 컨트롤러를 통해 모든 이미지를 제공하십시오.

class ImagesController < ApplicationController 
    before_filter :authenticate_admin!, :only => [:show] 
    def show 
    send_file "/images/#{params[:filename]}", :disposition => 'inline' 
    end 
end 
당신은 다른 사용자가 서버에있는 파일을 다운로드 할 수있을 것이다, 그러나 params[:filename]을 살균 있는지 확인하려면 것

! send_file

워드 프로세서 현재 위치 : http://apidock.com/rails/ActionController/DataStreaming/send_file

2

파일은 ActionDispatch::Static로 처리됩니다. IMO의 가장 좋은 솔루션은 유사한 미들웨어 (Rails source code 기반)를 제공하지만 일부 인증은 ActionDispatch::Static 앞에 삽입해야합니다. 이것은 미들웨어에서 인증을하기 때문에 와덴 기반 솔루션 (예 : Devise)과 함께 작동합니다. 워든 (Warden) 후에 미들웨어를 설치하고 그 후에받은 평범한 평야 인 ActionDispatch::Static이 실행되도록하십시오.

편집 : 주목할만한 한 가지 더. Nginx (나는 Apache와 다른 것들에 대해 잘 모르겠다)가 랙 스택에 요청을 전달하지 않고 모든 정적 파일을 자체적으로 제공하도록 구성되어 있다는 것은 생산 과정에서 흔히 볼 수 있습니다. 이 Nginx '기능을 해제해야 할 수도 있습니다.