ほげノート

「長編を書くより、短編を数多く完成させてください。それが上達への近道です」 by 手塚治虫

rolify を使ってみる

 はじめに

ここでは以下の記事を参考にして rolify を使ってみることにする。

 

使ってみる

ざっくりとアプリを作成する。

  • rails new rolify_sample
  • cd rolify_sample

 

Gem をインストールする。

  • echo "" >> Gemfile
  • echo "gem 'devise'" >> Gemfile
  • echo "gem 'rolify'" >> Gemfile
  • echo "gem 'cancancan'" >> Gemfile
  • bundle

 

Devise のジェネレーターを実行する。

  • bin/rails generate devise:install

 

User モデルを作成する。

  • bin/rails generate devise User

 

CanCanCan のジェネレーターを実行して、Ability クラスを作成する。

  • bin/rails generate cancan:ability

 

これで app/models/ability.rb が作成される。

f:id:matt-note:20190415164047p:plain

 

Rolify のジェネレーターを実行して、Role クラスを作成する。

  • bin/rails generate rolify Role User

 

これで app/models/role.rb が作成される。

f:id:matt-note:20190415164246p:plain

 

マイグレーションファイルも自動で作成される。

f:id:matt-note:20190415164512p:plain

 

マイグレーションを実行して、DB に設定を反映させる。

 

コンソールを起動する。

 

ユーザーを作成する。

  • user = User.create(email: "example@example.com", password: "test1234")

 

作成したユーザーのロールを admin に設定する。

  • user.add_role "admin"

f:id:matt-note:20190415165322p:plain

 

ロールの確認をしてみる。

  • user.has_role? :admin

f:id:matt-note:20190415170753p:plain

 

ability.rb で権限を定義する。

f:id:matt-note:20190416002716p:plain

 

コンソールから、権限を確認してみる。

  • ability = Ability.new(user)

f:id:matt-note:20190416002935p:plain

 

  • ability.can? :manage, :all

f:id:matt-note:20190416003033p:plain

-> 管理者権限を持つ人はすべてを管理できることを確認できた。

 

ロールを削除してみる。

  • user.remove_role :admin

f:id:matt-note:20190415171616p:plain

-> ロールを削除できた。

 

ロールを削除できたか確認してみる。

  • user.has_role? :admin

f:id:matt-note:20190415173713p:plain

 

ユーザー作成時に設定されるデフォルトのロールを作成してみる。

app/models/user.rb にコードを追加する。

f:id:matt-note:20190415171202p:plain

 

コンソールでユーザーを作成してみる。

  • user2 = User.create(email: "example2@example.com", password: "test1234")

 

新規ユーザーのロールを確認してみる。

  • user2.has_role? :new_user

f:id:matt-note:20190415171410p:plain

-> デフォルトのロールを作成できた。

 

with_role クラスメソッドで、指定したロールを持つ人の一覧を出力できる。

  • User.with_role :new_user

f:id:matt-note:20190416004107p:plain