2012-07-26 4 views
1

일반적인 질문이 있습니다 ...사용자가 다른 사용자 계정에 액세스하지 못하도록 차단

Michael Hartl의 튜토리얼 예제를 사용하여 사용자 모델을 빌드했습니다. 내가 곤란을 겪고있는 것은 다른 사용자에게 정보를 제공하여 URL을 변경하는 것입니다. 나는 Friendly_id를 id -> name에서 바꾼다.하지만 다른 사람에게 이름을 바꾼다면 홈 페이지가 표시 될 것이다. 내 사용자가 그렇게 할 수 없도록 제한하고 싶습니다.

Devise 또는 CanCan 또는 이와 같은 구현이 없어도 가능합니까? 사용자가 URL 바에서 이름을 변경하려고하는지 확인하는 유효성 검사를 던지려고합니다. 즉, 이름이 현재 로그인 한 사용자인지 확인하고 로그인하지 않은 경우 현재 사용자로 리디렉션합니다.

모델 정보가 필요하면 알려 주시기 바랍니다. 이것은 단지 추측

# Each time you make an action on your UsersController this filter will run 
before_filter :validate_url_hack 

def validate_url_hack 
    # Check the params hash to see if the passed :id matches the current user's id 
    # (note the .to_i on params[:id], as you are comparing against a Fixnum) 
    unless params[:id].to_i == current_user.id 
    # This line redirects the user to the previous action 
    redirect_to request.referer 
    end 
end 

, 그러나 나는 이런 식으로 뭔가가 작동해야한다고 생각합니다 :

TIA는

답변

2

이 같은이 시나리오의 유효성을 검사하여 UsersControllerbefore_filter를 넣을 수 있습니다.

+0

관계를 설정하면 다음과 같이 통화 범위를 지정할 수 있습니다.'@account = current_user.accounts.find (params [: id])' – Unixmonkey

+0

그래서 (미안 해요.) 계정 모델을 만들고, 사용자 모델 has_one : account 및 def show as @account = current_user.accounts.find (params [: id])에 적용 하시겠습니까? – RubyNewbie

+0

현재 설치 프로그램이 사용자가 admin인지 아닌지를 확인한 후 "show"페이지를 렌더링합니다. 그러나 URL로 이동하여 이름을 변경하면 사용자에게 "표시"페이지도 렌더링됩니다. 사용자는 다른 "쇼"페이지 이외의 다른 페이지에 액세스 할 수 없습니다. (해당되는 경우) – RubyNewbie

2

당신이 당신의 컨트롤러에 당신이

current_user.cars 

을하고 있음이의 사용자 ID를 전달해서는 안 있으므로, 귀하의 사용자 모델에 belong_to 연결을해야 특정 사용자에게 제한하려는 모든 모델 URL. 이것은 당신이 고안을 사용하고 있음을 보증합니다.

+0

devise 또는 "로그인"젬을 사용하지 마십시오. – RubyNewbie

관련 문제