About-cancan

認証用GEM cancan 導入手順 (2012/04/20~)

1. Gemfileに以下を追加しbundle installする

1
gem 'cancan'

2. Abilityクラスの生成を行う

1
$ rails g cancan:ability

3. User(ここでは管理者)モデルへroleカラムを追加する

1
$ rails g migration AddRoleToUser role:string

4. app/models/users.rbにroleの記述を追加

例)

1
2
3
4
(省略)
attr_accessible :role
ROLES = %w[admin member]
(省略)

5. app/models/ability.rbの関数initializeを編集(ここで権限内容を制御する)

例)

1
2
3
4
5
6
7
8
9
10
(省略)
def initialize(user)
  user ||= User.new # guest user (not logged in)
  if user.role == "admin"
    can :manage, :all
  else
    can :read, :all
  end
end
(省略)

6. 管理者権限スコープ(role)の編集(管理者追加/編集時)

画面にセレクタコントロールを追加する

app/views/devise/registrations/new.html.rbと
app/views/devise/registrations/edit.html.rbに以下を追加

1
2
3
4
(省略)
<%= f.label :role %>
<%= f.collection_select :role, User::ROLES, :to_s, :humanize%>
(省略)

7. app/views/hoges/index.html.erbを編集(ここではadminだけにEditを表示させる)

‘Admin’でのユーザ登録者のみが「Edit」できるようにする
その他のユーザは「Edit」できない

1
2
3
<% if can? :manage, hoge %>
<%= link_to 'Edit', edit_hoge_path(hoge) %>
<% end %>

8. 管理者権限による制限を付与するコントローラに以下のフィルタを追加する

1
2
3
4
5
class TaskController < ApplicationController
  (略)
  load_and_authorize_resource
  (略)
end

参考サイト:
http://d.hatena.ne.jp/dimros/20110326/1301145073 http://blog.livedoor.jp/nizoraul/archives/3711303.html http://yorunocafe.blogspot.jp/2011/08/rails-cancan.html