2012-02-26 2 views
2

레일즈 3.2.1 앱용 Devise를 사용하고 있습니다. 수퍼 유저/관리자 만 새 사용자를 추가 할 수 있도록 sign_up을 차단하고 싶습니다. 나는 그것을 어떻게 성취합니까?Rails Devise, 수퍼 유저 만 "가입"하는 방법

:

(업데이트) 나는 "/ 사용자/등록"끝이 Devise before filter that prevents access to "new_user_registration_path" unless user is signed-in

에서 제안하지만, 추가 컨트롤러가 분명하지 암호로 보호하는 새로운 경로를하기 때문에 그것이 작동하지 않는 시도 Devise :: RegistrationsController 클래스 heriting로 컨트롤러를 생성하십시오. 필터를 추가 할 수 있습니다. 당신은 당신의 routes.rb에서 등록 컨트롤러

class RegistrationsController < Devise::RegistrationsController 
    before_filter :authenticate_user! 
end 

등이 컨트롤러를 정의 할 필요가

devise_for :users, :controllers => { :registrations => 'registrations'} 
난 당신이 슈퍼 유저 만 사용할 수있는 CRUD를 만들 것을 제안하고 그가 할 수

답변

2

수퍼 유저 만 등록 경로에 대한 액세스를 제한하는 대신 사용자를 만들 수 있습니다. 여기에서 도움을 받으실 수 있습니다 : https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface. 경우

당신이, 당신이 당신의 대답에 넣어하지만 before_filter 이런 식으로 뭔가해야 거의 동일 할 것입니다 등록을 사용하려면 :

before_filter :authenticate_user!, :redirect_unless_admin 

# (...) 

private 
def redirect_unless_admin 
    unless current_user.admin   
    redirect_to root_path 
    end 
end 
1

확인 내가 테스트 토니 Amoyal 에서이 솔루션 그것은 매력처럼 작동합니다 ...
http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
그는 cancan을 사용하지만, 다른 메커니즘을 위해 쉽게 사용자 정의 할 수 있습니다. .

이 ... "당신이 사용자 등록을 보호하려는이 권한을 확인하지만 액세스를 제한하기 위해 고안 등록 컨트롤러를 사용자 정의 할 수 캉캉를 사용하여 우리를 필요로

: 자신의 블로그가 상처 입는 경우 는 나중에 참조 할 수 있도록 여기에 복사됩니다.

이 작업을 수행하는 한 가지 방법은 컨트롤러 디렉토리에 장치 컨트롤러를 복사하고 사용자 정의를 시작하는 것입니다.이 방법이 가장 좋은 방법 일 수 있으며 확실한 경로이지만 등록을 제한하려면 등록을 다시해야합니다. - 등록 컨트롤러를 구현하는 방법은 무엇입니까? 지금은 그렇지 않습니다. 사용자 지정이 더 많을 때 이해할 수 있지만 대신 Devise Registrations 컨트롤러에서 상속받습니다. 다음은 단계입니다.

1 단계 - 만들기 컨트롤러

$ mkdir app/controllers/users 
$ touch app/controllers/users/registrations_controller.rb 

2 단계 - 추가 사용자 정의 기능

class Users::RegistrationsController < Devise::RegistrationsController 
    before_filter :check_permissions, :only => [:new, :create, :cancel] 
    skip_before_filter :require_no_authentication 

    def check_permissions 
    authorize! :create, resource 
    end 
end 

체크 권한 방법은 정말 간단합니다. CanCan 메서드를 호출하고, authorize !, 현재 사용자가 사용자를 만들 수 있는지 확인합니다. 우리는 여기에서 리소스를 사용합니다. 왜냐하면 devise는 리소스를 사용하여 인증 할 수있는 모델을 참조하기 때문입니다. 또한 인증없이 작업에 액세스 할 수있게 해주는 Devise 필터 인 require_no_authentication 필터를 제거한 방법에 주목하십시오. "

관련 문제