認証用GEM cancan 導入手順 (2012/04/20~)
1. Gemfileに以下を追加しbundle installする
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