Dragon Arrow written by Tatsuya Nakaji, all rights reserved animated-dragon-image-0164

Rails5.2 管理者権限の作成

イメージ
Jan 14, 2019

railsで管理者権限を持たせる

実現したいこと


管理者しか入れたくないページがあるので、権限を管理者だけにする

(make access impossible except admin.)


行ったこと


usersテーブルに権限カラムを追加して、特定のユーザーにのみtrueを与える

(add admin column in users table.)

手順1. usersテーブルにadminカラムの追加

$ rails generate migration add_admin_to_users admin:boolean
(db/migrate/[timestamp]_add_admin_to_users.rb will be created!)


手順2. 生成されたマイグレーションファイルを編集
(Edit [timestamp]_add_admin_to_users.rb)

#[timestamp]_add_admin_to_users.rb
class AddAdminToUsers <ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, default: false
end
end


手順3. マイグレーションファイルを読み込む
(run migrate command)

$ rake db:migrate

これでusersテーブルにadminカラムが追加されました。

手順4. 開発者ユーザーにadmin:trueを入れる
(add admin:true in column)


方法A) seedデータを作成
# db/seeds.rb
User.create!(name: "ADmin User",
email: "admin@example.com",
password: "foobar",
password_confirmation: "foobar",
admin: true)

$ rake db:seed


または


方法B)コンソールから作成
$ rails console
>> user = User.find(name: "adminUserName")
>> user.admin?
=> false
>> user.toggle!(:admin)
=> true
>> user.admin?
=> true


viewに実装例

<% if current_user.admin? %>
<%= link_to "Delete", article_path(article), class: "btn btn-danger", data: {:confirm => "削除してもよろしいですか?"}, method: :delete %>
<% end %>

コントローラに実装例

before_action :admin_user, only: :destroy
private
def admin_user
redirect_to(root_url) unless current_user.admin?
end


完了!!