あなたがやろうとしていることのためにDeviseのRegistrationsController
ものをオーバーライドする必要はありません。
管理者が任意のロール セットを持つユーザーを作成できるようにするには、独自のコントローラーを使用するだけです。Devise では、ユーザーを自分で簡単に作成できるため、これを処理するコントローラーを作成するだけで済みます。もちろん、管理者のみがこの機能を使用できるように、Pundit を使用して保護することを忘れないでください。
Confirmable
モジュールを使用する場合、このアプローチは引き続き機能します。ただし、ユーザーの作成時に確認メールが送信されないためuser.confirm!
、モデルを保存した後に電話してすぐにアカウントのロックを解除するか、 を使用して確認メールを手動で送信する必要がありますuser.send_confirmation_instructions
。
編集:
この Pundit ポリシーは、あなたがやろうとしていることにうまくいくかもしれませんし、うまくいかないかもしれません。Pundit のメソッドを使用するには、ここでcreate
Devise のアクションをオーバーライドする必要があります。念のため、ロール リストを別の場所 (モデル内など) に移動する必要もあります。RegistrationsController
authorize
class UserPolicy < Struct.new(:current_user, :target_user)
def create?
registration_roles.include?(target_user.role) if current_user.nil?
end
private
def registration_roles
%w(RED BLU Spectator)
end
end