2013-03-24 2 views
0

권한이없는 사용자가 특정 작업에 액세스하지 못하도록 보호하려고합니다. 여기필터 이전에 호출 된 도우미 메서드에서 무엇을 반환해야합니까?

내 컨트롤러에서 작은 예 :

class RestaurantsController < ApplicationController 
    before_filter :require_admin, :only => [:new, :create, :update, :edit, :destroy] 

    #...yada yada yada... 
end 

그리고 내와 ApplicationController에

나는 도우미 메서드를 배치 (나는 많은 컨트롤러에서 그 같은 행동을 보호해야하기 때문에), 그래서 자신을 반복하지 않는다.

class ApplicationController < ActionController::Base 
    protect_from_forgery 

    private 
    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

    def require_admin 
    ??? 
    end 
    helper_method :current_user 
end 

내가하기 위해 내 require_admin 메소드로부터 반환해야하는 것 : current_user는 관리자가 아닌 경우

  1. 방지 흐름.
  2. current_user이 admin이면 규칙적인 흐름을 허용합니다.

require_adminhelper_method으로 지정해야합니까?

나는 is admin? 비트를 처리하는 방법을 알고 있으며, 필자의 필터가 호출하는 도우미 메서드에서 반환 할 내용을 알아야합니다.

제안 사항?

답변

1

다른 사람이 볼 권한이없는 페이지에 액세스하려고하는 경우 404 오류를 발생시키는 것을 선호합니다.

def require_admin! 
    raise ActiveRecord::RecordNotFound unless authenticate_user! && current_user.is_admin? 
    end 

위의 내용은 authenticate_user! 당신이 사용하는 경우 당신이 가지고있는 방법. devise를 사용하지 않는다면, current_user가 아닌 조건으로 위에 보여준 요구 된 관리자와 비슷한 것을 만들 것입니다.

is_admin을 추가 하시겠습니까? 메서드를 사용자/관리자 클래스에 적용하십시오.

모든 컨트롤러는 응용 프로그램 컨트롤러를 상속하므로, 도우미 메서드로 만들 필요가 없습니다.

관련 문제