rails 独学して軽くにちゃんまとめつくる

インターン中大学生のブログ

ぐるぐる回って何をしたいのかが変わってく。今はマッチングサイトを作りたい、もしくは論文のキュレーションサイトかな。

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

特権を持たせるユーザーを指定する方法を学ぶ。利用方法はサイトの副管理人をつくったり、管理人としての特権を持たせたりできる。実装自体は非常に簡単。持たせる機能も削除機能に制限する。

 

とは言っても単純で、モデルにadminカラムを追加し、ビューでdeleteボタンを作り、コントローラーでそのadminをもっているかを確認している、非常に簡単に理解できるものであることに注意。

 

$ rails generate migration add_admin_to_users admin:boolean

 

マイグレーションで、default:falseにする

db/migrate/[timestamp]_add_admin_to_users.rb

 class AddAdminToUsers <ActiveRecord::Migration

def change
add_column :users, :admin, :boolean, default: false end

end

 

マイグレーションの実行

コマンドライン

db/migrate/[timestamp]_add_admin_to_users.rb 

 

開発ユーザーにadmin: trueを書く

db/seeds.rb

User.create!(name: "Example User",

email: "example@railstutorial.org",

password: "foobar",

password_confirmation: "foobar",

admin: true)

 

deleteボタンを追加する(クライアント側での制御)

app/views/users/_user.html.erb(ユーザーのindex)

<li>
  <%= gravatar_for user, size: 50 %>
  <%= link_to user.name, user %>
  <% if current_user.admin? && !current_user?(user) %>
 | <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %> <% end %> </li>

 

destroyアクションを追加する

app/controllers/users_controller.rb(indexを追加したコントローラー)

 before_action :logged_in_user, only: [:index, :edit, :update, :destroy]

  def destroy
    User.find(params[:id]).destroy
    flash[:success] = "User deleted"
    redirect_to users_url
  end

 

adminで制限を加える(サーバー側での制御)

app/controllers/users_controller.rb(indexを追加したコントローラー)

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