2013-08-07 1 views
0

현재, 나는 이런 식으로 뭔가가 :Sinatra가 특정 예외 상황에서 403 (금지됨) 서비스를 제공하도록 구성하려면 어떻게합니까?

def valid?(stuff) 
    #... 
end 

get '/somewhere' 
    return status 403 unless valid?(something) && valid?(something_else) 
    # ... 
end 

(이 특정한 경우를, 나는 그들이 shouldn에 액세스하는 사용자를 방지하기 위해 파일 이름을 포함하는 param가 해당 매개 변수에 허용 된 디렉토리 내에 있는지 여부를 확인하고 't).

하지만 여러 장소에서 동일한 구조를 가지고 있기 때문에 다루기 힘들어집니다. 차라리 이렇게 할 것입니다 :

def ensure_valid(stuff) 
    raise Forbidden unless valid?(stuff) 
end 

get '/somewhere' 
    ensure_valid(something) 
    ensure_valid(something_else) 
    # ... 
end 

예외가 있습니까? 그렇지 않다면 Sinatra (또는 랙과 관련하여)가 사용자 정의 예외를 발견하면 status 403으로 요청을 중단하도록 어떻게 구성 할 수 있습니까?

답변

3

halt 403 unless valid?(something) && valid?(something_else)

http://www.sinatrarb.com/intro.html#Error

소스를 작동합니다. 불행히도,`disable : show_exceptions`을 제외하고는`development` 환경에서 작동하지 않습니다. 오 잘 ...

+0

굉장! 지금은 테스트 할 수 없지만 문서를 읽으면 '중단'이 내가 찾던 것과 똑같습니다. – Amadan