문제

나는 그것을 얻으려고 노력하고있다 permit 사용 방법 Rails Authorization-Plugin 그리고 authlogic, 그리고 나는이 오류에 계속 실행됩니다.

내가 시도 할 때 :

class ApplicationController < ActionController::Base
  ...
  before_filter permit 'admin'
  ...

나는 이것을 얻는다 :

Authorization::CannotObtainUserObject in HomeController#index
Couldn't find #current_user or @user, and nothing appropriate found in hash

이제 나는 내 것이있다 current_user 메소드 설정 및 제 앱의 다른 곳에서 사용했기 때문에 작동합니다.

class ApplicationController < ActionController::Base
  ...

  helper_method :current_user

  private

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  ...

또한이 방법이 작동하기 때문에 데이터베이스에 적절한 역할을 가진 사용자가 있다는 것을 알고 있습니다.

def require_admin
   unless current_user.is_admin? || current_user.is_root?
      flash[:warning] = 'You are not an administrator and cannot access this page.'
      redirect_to root_path
   end
end

이것을 사용하여 사용자 수준을 확인하면 모든 것이 작동하게 할 수 있습니다.

before_filter :require_admin, :only => 'index'

...하지만 나는 같은 것을 효과적으로 할 수 없어야합니다. permit 그리고 permit??

어떤 도움이든 큰 감사를드립니다. 더 많은 코드를 볼 필요가 있으면 알려 주시면 기꺼이 게시하겠습니다. Google에는이 두 시스템이 서로 협력하는 것에 대해 헤드 또는 테일을 만들 수있는 것이 실제로 없습니다.

도움이 되었습니까?

해결책

좋아, 나는 그것을 알아 냈다고 생각한다.

Jared가 올바르게 지적했듯이 적절한 사용법은

permit 'admin'

(a의 일부가 아닙니다 before_filter).

하지만...

... 기본값 :get_user_method 설정되었습니다 #current_user, 그것이 무엇입니까 acts_as_authenticated 플러그인 사용. 앞에서 언급 한 바와 같이, 나는 authlogic을 사용하고 있으며, 여기서 방법이 다음과 같이 정의되어 있습니다. current_user (파운드 표시없이).

그래서 나는 다음을 시도했다.

permit 'admin', :get_user_method => current_user

그런 변수 나 방법이 없다는 것을 설명하는 멋진 오류 메시지로 만 인사하는 것만으로 만 인사합니다. 그러나 내가 놓친 것은 해시 옵션이 , 방법에 대한 직접적인 호출이 아닙니다 !! (멍청한 실수, 알아!)

그래서

permit 'admin', :get_user_method => 'current_user'

... 나를 위해 일하는 것 같습니다.

나는 루비와 레일을 좋아하지만 때로는 단순성이 그 자체의 저주가 될 수 있습니다. 나는 항상 단순한 것들에 의해 소유됩니다. :)

다른 팁

플러그인을 잘못 사용하고 있습니다. 필터 이전 필터에 배치해서는 안됩니다.

글로벌 수준에서는 간단히 선언합니다.

permit 'admin'

그게 다야.

모든 동작은 current_user 또는 @user 객체를 찾고 로그인 페이지로 리디렉션됩니다.

액션 별 레벨에서는 블록으로 사용합니다.

def index
  permit 'admin' do
    @some_models = SomeModel.all
  end
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top