1

私のactive_adminには次のものがあります。これはadmin_userモデルのデフォルトです。これにより、すべての admin_users が他のすべての admin_users のパスワードを変更できるようになります。admin_users が他のユーザーのパスワードを変更できないように制限する方法を知っている人はいますか?

ActiveAdmin.register AdminUser do     
  index do                            
    column :email                     
    column :current_sign_in_at        
    column :last_sign_in_at           
    column :sign_in_count             
    default_actions                   
  end

  filter :email                       

  form do |f|                         
    f.inputs "Admin Details" do       
      f.input :email                  
      f.input :password               
      f.input :password_confirmation  
    end                               
    f.actions                         
  end                                 
end
4

2 に答える 2

0

もう1つの方法は、このフォームからpasswordフィールドとpassword_confirmationフィールドを削除して、「パスワードの変更」アクションを作成するか、パスワードを変更できる「マイアカウント」ページを作成することです。

3番目の方法は、次のように、「自分」を編集しているときにのみパスワードフィールドを表示することです。

ActiveAdmin.register AdminUser do     
  index do                            
    column :email                     
    column :current_sign_in_at        
    column :last_sign_in_at           
    column :sign_in_count             
    default_actions                   
  end

  filter :email                       

  form do |f|                         
    f.inputs "Admin Details" do       
      f.input :email
      if(f.object == current_admin_user)
        f.input :password               
        f.input :password_confirmation
      end
    end                               
    f.actions                         
  end                                 
end

テストされていませんが、動作するはずです。

更新 質問へのコメントで提案したように、特定の1人のユーザーが他のすべてのユーザーのパスワードを更新できるようにする場合は、次のことを検討できます。

form do |f|                         
  f.inputs "Admin Details" do       
    f.input :email
    if(current_admin_user.is_super_admin?)
      f.input :password               
      f.input :password_confirmation
    end
  end                               
  f.actions                         
end

is_super_admin?ブール値を参照することも、フィールドis_super_adminに応じてモデルのメソッドになることもあります。role

#  role                 :string(255)

class AdminUser < ActiveRecord::Base
  ROLES = ['normal', 'super']
  SUPER_ROLE = 'super'

  def is_super_admin?
    role == SUPER_ROLE
  end
end

Update 2 確かに、ユーザーが投稿パラメーターを変更して他のユーザーのパスワードを変更できないようにする必要があります。繰り返しますが、オプション1があり、コントローラーで実行します。私はActiveAdminについての知識が浅いので、もっと良い方法があるかもしれませんが、これはうまくいくはずです:

ActiveAdmin.register AdminUser do
  controller do
    def create
      params.delete(:password)
      params.delete(:password_confirmation)
      super
    end
  end
end

もう1つの(より洗練された)解決策は、AdminUsersのパスワードが一括割り当てによって変更されないようにすることです。この種のロジックはモデルに入ります。

class AdminUser < ActiveRecord::Base
  attr_accessible :login, :name, :email # .. and everything else you need to be able to edit through a normal form, but NOT password and password_confirmation
end

change_password次に、個々のユーザーがパスワードを変更できる独自のメソッドを作成することをお勧めします。そのフォームを保存するコントローラーアクションでは、次のようにします。

def submit_change_password
  @admin_user = current_admin_user
  @admin_user.password = params[:password]
  @admin_user.password_confirmation = params[:password_confirmation]
  if @admin_user.save
    ..
  else
    ..
  end
end

このように、彼らは自分のパスワードのみを変更することができます。

于 2013-03-05T14:06:20.380 に答える
0

私はわかりません。しかし、あなたは試してみることができます、

ActiveAdmin.register AdminUser do

  actions :all, :except => [:new]

  controller do
    def action_methods
      if current_admin_user.role?(AdminUser::ADMIN_ROLE)
        super
      else
        super - ['edit', 'destroy']
      end
    end
  end
end
于 2013-03-05T10:21:58.090 に答える