4

会社の管理者が会社のユーザーを作成および更新できるアプリに取り組んでいます。(ユーザーは、自分のアカウントを個別に作成および更新することもできます)。

登録と権限管理にはDeviseとCancanを使用しました。必要なサインアップとユーザー更新プロセスを取得するように Devise を構成しました。管理ビュー用の名前空間を作成しました。

管理コントローラー (/app/controllers/admin/base_controller.rb) は次のようになります。

class Admin::BaseController < ApplicationController
  authorize_resource :class => false
  layout 'admin'

  def dashboard
  end
end

「通常の」users_controller に加えて、管理者ユーザー管理専用のコントローラー (/app/controllers/admin/users_controller.rb) と関連するビューがあります。

class Admin::UsersController < Admin::BaseController
  ...
end

では、Devise 関連のユーザー管理機能 (この時点ではユーザーの作成と更新) を実装する最もクリーンな方法は何ですか?

  1. 「通常の」registrations_controllerとconfirmations_controllerに(ユーザー権限に基づいて)条件を付けて、異なるビューをレンダリングおよびリダイレクトしますか? (cf.別のコントローラー内でフォームを作成する)

  2. または、管理者名前空間に新しいコントローラーを作成しますか? 最新の方が優れている場合、従うべき主な手順は何ですか?

4

1 に答える 1

1

ここに問題があります。名前空間を作成するか、ユーザー管理を別のコントローラーに移動すると、Devise の範囲を離れます。したがって、あなたがいる時点ではAdmin::UsersController、Devise はあなたが何をしているのか気にしません。あなたが述べたように、「デバイス関連」の管理機能はありません。Admin::UsersController必要に応じて、標準の RESTful コントローラーとして実装できます。

このように、名前空間付きコントローラーを介してユーザーを作成すると、Devise は引き続き確認な​​どのアクションを実行します。この方法でユーザーを作成および更新する場合、注意すべき点が 1 つあります。admin としてパスワードを設定しない場合は、params ハッシュからpasswordandを削除する必要があります。password_confirmationこれを行うには、createandupdateアクションの開始は次のようになります。

if params[:user][:password].blank?
  params[:user].delete(:password)
  params[:user].delete(:password_confirmation)
end

私はこれと同じ方法を多くのアプリケーションで採用していますが、まだ失敗したことはありません。

編集

namespace :admin do
  resources :users
end
于 2012-12-29T14:06:23.923 に答える