2011-03-26
Rails3.0 で Devise と CanCan を動かす
目的
認証と権限
参考
- https://github.com/plataformatec/devise
- https://github.com/ryanb/cancan
- http://d.hatena.ne.jp/lounge1975/20110215/1297833886
- http://d.hatena.ne.jp/next49/20100905/p1
- http://d.hatena.ne.jp/babie/20100729/1280381392
環境
- gem 1.3.7
- Rails 3.0.5
- Devise 1.1.8
- CanCan 1.6.2
内容
Welcome(認証)->TOP(権限にて表示を変更)
Welcomeページの作成、deviseの設定は省略します。
lounge1975さんの日記を参考にいたしました。
Gemfile
gem 'devise'
gem 'cancan'
$ bundle install
Userモデルとビューの作成
$ r g devise:install
$ r g devise users
$ r g devise:views
$ r g migration add_role_to_users role:string
$ rake db:migrate
$ r g cancan:ability
app/models/users.rbに以下を追加
(省略)
attr_accessible :role
ROLES=%w[admin author]
(省略)
app/models/ability.rbに以下を追加
(省略)
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.role == "admin"
can :manage, :all
else
can :read, :all
end
end
(省略)
app/views/devise/registrations/new.html.rbと
app/views/devise/registrations/edit.html.rbに以下を追加
に以下を追加
(省略)
<%= f.label :role %>
<%= f.collection_select :role, User::ROLES, :to_s, :humanize%>
(省略)
app/views/hoges/index.html.erbを編集(ここではadminだけにEditを表示させます)
<% if can? :manage, hoge %>
<%= link_to 'Edit', edit_hoge_path(hoge) %>
<% end %>
実行すると、'Admin'でのユーザ登録者のみが
「Edit」できるようになります。
その他のユーザは「Edit」できません。
あと書き
Deviseで認証、cancanは権限です。cancanは権限を継承したり、代理も可能そうなので、おもしろそうだと感じました。
- 2 http://d.hatena.ne.jp/next49/20100905/p1
- 1 http://d.hatena.ne.jp/babie/20060324/p3
- 1 http://d.hatena.ne.jp/babie/20100729/1280381392
- 1 http://d.hatena.ne.jp/babie/20100809/1281316971
- 1 http://d.hatena.ne.jp/babie/20110220/1298181572
- 1 http://d.hatena.ne.jp/lounge1975/20110215/1297833886
- 1 http://d.hatena.ne.jp/next49/
- 1 http://d.hatena.ne.jp/next49/20100719/p2
- 1 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=OBW&rls=org.mozilla:ja:official&q=cancan+rails&aq=0&aqi=g1g-r5g-mr3&aql=&oq=cancan+ra
- 1 http://www.google.co.jp/search?hl=ja&client=firefox-a&hs=ikb&rls=org.mozilla:en-US:unofficial&q=cancan+rails&aq=f&aqi=g1&aql=&oq=