#初めに
ポートフィリオを作成する際、管理者側機能を実装するの面倒に感じたので管理者側はgemを使用することにしました。
管理者機能を持つgemは複数ありますが、今回は『Rails_admin』の導入しましたので、記録を残したいと思います。
#環境
・Ruby '2.3.8'
・Rails '5.2.3'
#gemの導入(devise編)
gem 'devise'
$ bundle install
$ rails g devise:install
$ rails g devise user
$ rails db:migrate
$ rails g devise:views users
以上でdeviseの導入は完了です。
#gemの導入(rails_admin編)
gem 'rails_admin', '~> 2.0.0.beta'
$ bundle install
$ rails g rails_admin:install
? Where do you want to mount rails_admin? Press <enter> for [admin]>
$ admin
rails routes
で/adminが生成されていることを確認します。
rails s
後、生成されたURLを入力すると表示されます。
#gemの導入(cancancan編)
gem 'cancancan'
$ bundle install
以上で必要gemの導入は完了です。
#管理者権限の設定
- cancancanでabilityを生成します
$ rails g cancan:ability
- 生成されたモデルを以下の様に変更します。
(model/ability.rb)
管理者権限を持つユーザに管理画面へのアクセスと全てのモデルに対しての全ての操作(新規保存、編集、削除など)」を許可する設定です。
class Ability
include CanCan::Ability
def initialize(user)
if user.try(:admin?)
can :access, :rails_admin
can :manage, :all
end
end
end
3.config/initializers/rails_admin.rb
も以下のように変更します。
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :user
end
config.current_user_method(&:current_user)
## == Cancan ==
config.authorize_with :cancan
## == Pundit ==
# config.authorize_with :pundit
#管理者権限の付与
deviseで登録したユーザに管理者権限を持たせたいと思います。
ユーザが管理者がどうかを判断する為に、「admin」カラムを追加し、ture or falseで判断出来るようにします。
$ rails g migration add_column_to_users
class AddColumnToUsers < ActiveRecord::Migration[5.2]
def change
add_column :users, :admin, :boolean, default: false
end
end
$ rails db:migrate
schema.rbを確認し、正しく追加されていることを確認してください。
#登録ユーザに権限を付与する
$ rails c
$ User.all
$ user = User.find(3)※任意のユーザに付与してください。
$ user.update_attribute :admin, true
今回の場合は、3番目にユーザに管理者権限を付与しました。
このユーザは管理画面に遷移できます。
#管理者の条件分岐
管理者のみの表示させたいときは、<% if current_user.try(:admin?) %><% end %>でログイン中のユーザが管理権限を持つユーザを判断出来ます。
#rails_adminの日本語化
1.Railsの日本語に変更します。
config.i18n.default_locale = :ja を追記する
2.config/locales/rails_admin.ja.yml
を作成します。
3.こちらの翻訳をコピーし、rails_admin.ja.yml
に貼り付けます。
以上で日本語化は完了です。
#参考資料
【Rails】管理画面(rails_admin)を実装するとユーザー情報管理が想像以上に便利な話
#最後に
簡単に管理者機能を実装することが出来ました。
私はこの便利なgemのおかげで、他の機能に時間を掛けることが出来ました。
もし、よかったら参考してみてください。