LoginSignup
8

More than 3 years have passed since last update.

posted at

【ActiveAdmin】showのデフォルトaction itemsを消去する

マスタ管理機能を楽に実装できるActiveAdminに関する記事です。
以前ActiveAdminで簡単な管理ツールを作っていたのですが、そのときにログインユーザーの権限毎に実行できるアクションを制限したいと考えました。その際にshowのデフォルトaction itemsがどうしても消せずに困ったので記事にしておきます。

ユーザー権限によって実行できるアクションを限定する

この手の情報は既に多くの記事が存在するのでここでは詳述しません。

Userテーブルへのカラム追加

まずは下記を参考に、Userテーブルにroleカラムを追加します。

cancanを使わずにactive_adminの管理画面で、current_userの権限によるviewの出し分けをする - Qiita

これで、admin_current_user.roleで、ログインユーザーの権限を取得することができます。あとは煮るなり焼くなりご自由に・・・ということで、早速実装してみました。

index

まずはindexに権限振り分けを設定します。ここでは、roleがadminのアカウントでログインしたユーザーのみレコードの「削除」を行えるようにしています。

  index do
    actions defaults: false do |daily|
      item '閲覧', admin_daily_path(daily), class: 'view_link member_link'
      item '編集', edit_admin_daily_path(daily), class: 'edit_link member_link'
      item '削除', admin_daily_path(daily), class: 'delete_link member_link', method: :delete, data: { confirm: '本当に削除しますか?' } if current_admin_user.role == 'admin'
    end
  end

Admin(管理者)ユーザーでログインした場合
スクリーンショット 2019-01-16 22.07.03.png

User(一般)ユーザーでログインした場合
スクリーンショット 2019-01-16 22.08.43.png

いいカンジ。

show

では、次にshow行ってみましょう。
indexと同様、Adminユーザーのみ削除を許可します。

  action_item :only => :show do
    link_to('日報(実績)を編集する', edit_admin_daily_path(daily))
  end
  action_item :only => :show do
    link_to('日報(実績)を削除する', admin_daily_path(daily), method: :delete, data: { confirm: '本当に削除しますか?' }) if current_admin_user.role == 'admin'
  end
  action_item :only => :index do
    link_to('日報(実績)を作成する', new_admin_daily_path)
  end

ではAdminユーザーで確認します。
instruction01.png

うーん、なんか同じようなボタンがいくつかありますね。
どうやらデフォルトのaction itemsが表示されているみたいです。

どうすればデフォルトのaction itemsがクリアできるのかわからず、結構悩みました。
indexで指定するときはactions defaults: falseで済んだんですが・・・。

その結果、以下に答えがありました。

Editing/Removing Action Items? · Issue #760 · activeadmin/activeadmin · GitHub

config.clear_action_items!を指定すると、action itemsがクリアされるみたいですね。
早速修正して実行してみます。

Admin権限
instruction2.png

User権限
instruction3.png

めでたしめでたし。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
8