2013-10-21 1 views
0

Devise를 사용하는 데 문제가 있습니다. 음, 이것은 정말로 문제가 아니지만 "나는 어떻게 해야할지 모르겠습니다".레일 4 : 여러 역할에 대해 Devise 3.1.0을 사용자 지정합니다.

실제로 Rails 4 응용 프로그램에서 Devise 3.1.0을 사용하고 있습니다. 지금까지 나는 사용자가 가서 스스로 시스템에 등록 할 수있는 나의 sign up만을 가지고있었습니다.

문제는 이제 각 사용자가 특정 그룹 (회사 자체)에 속하기 때문에 모든 사용자에게 그룹 및 역할을 추가한다는 것입니다. 따라서이 경우 사용자가 처음 등록 할 때 관리자로 등록하고 회사를 만듭니다. 그러나이 응용 프로그램의 내부에서이 관리자가 그 모든 중요한 회사에 속한 다른 사용자를 만들고자한다고 가정 해 봅시다.

나는 Devise::RegistrationController을 무시할 수 있지만 원래 코드를 보면 자신의 코드를 복사하고 작동 시키면 코드가 부 풀릴 수 있다는 느낌을 받게됩니다. update

특히 걱정거리는 strong parameters입니다.

protected 
    def account_update_params 
    params.require(:user).permit(:lastname, :firstname, :email, :current_password, :password, :password_confirmation) 
    end 

을하지만 관리자와 응용 프로그램에서 계정을 추가 할 경우, 나는 또한 레지스터 형태의 보안 문제가 될 수 있습니다 :role을 허용해야합니다 실제로 내가 같이 Devise::RegistrationsControlleraccount_update_params를 오버라이드 (override), 설명해 드리죠 . 등록하는 동안 누군가가 역할에 무엇인가 투입하려고하면 어떻게 될까요?

:role을 응용 프로그램에만 허용하는 가장 좋은 방법은 없지만 로그 아웃 할 때는 어떻게해야합니까?

모두에게 감사합니다.

답변

1

예 너무 겹쳐 쓰는 컨트롤러를 싫어합니다. 고안 문제의 일부는 다소 경직되어 있고 사용자 정의 할 수 없다는 것입니다.

routes.rb 파일에서 새 경로를 만듭니다.

get '/users/sign_up_as/:role' => 'devise/registrations/#new', :as => 'new_user_registration' 

하고 또한 당신이하지 않아도됩니다 명심까지 당신이

= link_to 'Sign Up', new_user_registration_path(:role => 'admin') 

을 할 수있는 기호에 대한 링크를 만들려면 라인

<%= f.hidden_field :role, :value => params[:role] %> 

으로 고안 등록보기를 수정 폼 자체에 devise 등록 컨트롤러를 사용합니다. 당신이 User.create를 실행하면 여전히

여기
+0

도움 주셔서 감사합니다. 나는'User.create'를 사용하는 것이 여전히 인증 엔진을 작동 시킨다는 것을 몰랐다. 그건 내 문제를 고쳐서 알았습니다. 고마워 :) – lkartono

+0

차가운, 나중에 나는이 같은 문제를 극복하기 위해 노력하는 시간과 함께 개발 시간을 보냈다. Devise는 환상적이지만 맞춤 설정하기가 어려울 수 있습니다. – OneChillDude

0

내가 그것을 할

가정하는 방법이다 등 확인 이메일을 보내드립니다 고안 : 1. 사용자가 로그인까지, 그는 새로운 회사의 관리자입니다 2 . 사용자는 관리자 또는

class User < ActiveRecord::Base 
    after_create :set_account_and_admin 

    protected 
    def set_account_and_admin 

    if self.account_id.nil? 
    @account = Account.create! 
    self.update(account_id: @account.id, admin: true) 
    end 
end 

그런 다음 응용 프로그램/모델/user.rb의 사용자 모델에 대해 after_create를 작성,

우선 적용 전을 만들 궁리 우선합니다 다른 논리에 의해 응용 프로그램을 만들 수 있습니다 n 응용 프로그램/컨트롤러/registrations_conroller.누군가가 당신의 가입 응용 프로그램으로 이동하고 새 계정 및 사용자 모델은 당신과 설정의 관리자가 새로운 사용자를 새 계정을 만들 것입니다 얻을 것이다 사용자/암호에두고 때 지금

def create 
    build_resource(sign_up_params) 

    if current_user 
    resource.account_id = current_user.account_id 
    end 

    #...rest of devise stuff taken from the gem 
end 

경우 rb.

사용자가 로그인하면 새 사용자를 만들 수 있으며 사용자가 로그인하여 현재 사용자 계정에 새 사용자를 할당하게됩니다.

admin/groups에 대한 논리를 추가하고 새로운 사용자를 만들 수 있으며 양식에 논리를 추가하는 것에 대해 걱정할 필요가 없습니다.

또 다른 대안으로 컨트롤러에서 'inappcreate'와 같은 별도의 작업을 수행하고 사용자 _form의 작업으로 라우팅하는 것입니다.

관련 문제