2012-04-04 4 views
3

가입을 Devise 관리자로 제한하려고합니다. 가능한 경우 CanCan을 지금 사용하지 않는 것이 좋습니다. 옵션 # 1에 설명 된대로 별도의 Devise Admin 모델을 만들었습니다 : https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role.Devise를 사용하여 가입을 제한하는 방법

다음은 여기에 설명 된대로 사용자를위한 CRUD 인터페이스를 설정합니다 : https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface.

사용자 컨트롤러에서 before_filter :authenticate_admin!과 같은 것을 사용하여 새로운 가입을 제한하고 싶지만 어떤 이유로 새로운 가입을 제한하지 않습니다.

내 routes.rb은 다음과 같습니다

devise_for :admins 
devise_for :users, :path_prefix => 'd' 
resources :admins 
resources :users, :controller => "users" 

어떤 아이디어가 왜 before_filter :authenticate_admin! 새로운 가입을 제한되지 않는 이유는 무엇입니까?

답변

8

관리자와 사용자가 앱에서 두 가지 모델이므로 사용자 컨트롤러에 before_filter :authenticate_admin!을 사용할 수 없습니다. 나는 완전히 당신이 무슨 뜻인지 이해한다면

는 모르겠지만, 새로운 사용자에 대한 등록 (또는 관리자)을 채택하지 않으려면이 작업을 수행 할 수 있습니다

# in your User(Admin) model 
devise :registerable # remove :registerable 

희망이 도움이!

+0

관리자 역할을 추가 할 때'before_filter : authenticate_admin! '을 사용할 수 있어야합니다. 이 기능은 현재 사용자 색인 및 표시 작업 (관리자로 사용자 관리)에서 나를 위해 작업 중입니다. 왜 액션을 만들지 않는지 확실하지 않습니다. 제거하고 싶지 않습니다. 관리자가 사용자를 추가 할 수 있기를 원하기 때문에 등록이 가능합니다. – Scott

+0

안녕하세요. Scott, 새로운'create' 액션을 정의 할 필요가 없습니다. 당신이 devise의 소스 코드를 들여다 보면,'app/controllers/devise/registrations_controller.rb'에서 devise가 당신의 모든 작업을 수행했다는 것을 알게 될 것입니다,'authenticate_scope!'는'authenticate_admin! '귀하의 경우, prepended되며 ** edit edit update update **에 대해서만 작동합니다 **. 액션을 생성하기 위해서'authenticate_admin! '필터를 추가하고 싶다면'Devise :: RegistrationsController'를 상속 받아'prepend_before_filter : authenticate_scope !: : except => [: cancel]'을 추가하면됩니다. – Tomato

+1

나는 이것이 장치를 사용하는 것만으로 너무 복잡해지기로 결정했다. 그래서 CanCan을 추가했다. 도와 주셔서 감사합니다. – Scott

2

나는 비슷한 것을 찾고있었습니다. 새로운 등록을 모두 불가능하게합니다. 어디 선가 메일 링리스트에이 문제를 발굴하고 내 문제를 해결하는 동안은 당신을위한 괜찮은 출발점이 될 수 있습니다 유사한

class RegistrationsController < Devise::RegistrationsController 
    def new 
    flash[:failure] = t('registrations.registrations_disabled') 
    redirect_to root_path 
    end 
end 

어쩌면 뭔가하지만, CURRENT_USER는 관리자가 다음을 기반으로 리디렉션 있는지 검사를 추가 그 위에 ...

1

나는 이것에 대해 잠시 생각해 보았습니다. 그리고 마침내 이것을 생각해 냈습니다.

은 유증에 의해이 도움이

class UsersController < Devise::RegistrationsController 

    before_filter :authenticate_admin! 

    def new 
    if admin_signed_in? 
     super 
    else 
     redirect_to admin_session_path 
    end 
    end 

희망을 만들어 모든 모델의 도우미 함수가 있습니다. 그것은 매력처럼 작동합니다 :

관련 문제