标签:
devise、cancan和rolify这三个组件结合,可以建立完整而强大的用户权限模型。
下面就简单介绍下这三者结合使用的方法,比较浅,深层次的大家自己去看文档挖掘,这里仅仅介绍最基本的使用。
这里我用的是ruby 1.9.3-p484 rails 3.2.16
rails new demo --skip-bundle #跳过bundle
在Gemfile里面添加如下Gem包
1
2
3
4
|
# add a perfect user verify system gem ‘devise‘ gem ‘cancan‘ gem ‘rolify‘ |
然后运行bundle install
$ rails generate devise:install
这句命令会产生一个用户指南,告诉你该做的几件事请,以下是内容翻译(已经去除heroku部署的那一条,增加了登录退出选项的说明):
1) 确定你的环境中有一个缺省的URL,config/environments/development.rb:
config.action_mailer.default_url_options = { :host => ‘localhost:3000‘ }
如果在production环境, :host 必须设置成应用的真实主机名。
2) 确定已经在config/routes.rb中定义了root_url(注意删除public下面的index.html), 例如:
root :to => "home#index"
可以使用下面命令生成一个home#index的页面:
rails g controller home index
3) 在app/views/layouts/application.html.erb中增加消息提醒,例如:
<p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p> |
4) 很多时候还需要增加登录、退出的选项:
1
2
3
4
5
6
7
|
<% if current_user %> <%= link_to( ‘退出‘ , destroy_user_session_path, :method => :delete ) %> | <%= link_to( ‘修改密码‘ , edit_registration_path( :user )) %> <% else %> <%= link_to( ‘注册‘ , new_registration_path( :user )) %> | <%= link_to( ‘登录‘ , new_session_path( :user )) %> <% end %><span></span> |
5) 如果要定制Devise的view模型,可以再执行以下语句:
$ rails g devise:views
$ rails g devise User $ rake db:migrate
在需要认证的模型中,如HomeController,增加下面代码:
before_filter :authenticate_user!
cancan提供对资源的授权控制。例如,在视图中使用can?方法来决定是否显示某个页面元素。如果系统角色非常简单,那么cancan还在代码中直接指定常量就可以支持,具体操作可以参考官方文档。但要提供复杂的角色管理,最好的方案,还是在devise基础上再集成cancan+rolify。
gem ‘cancan‘ gem ‘rolify‘
$ rails generate cancan:ability $ rails generate rolify Role User $ rake db:migrate
1
2
3
4
5
6
7
8
9
10
11
|
class ApplicationController < ActionController::Base def after_sign_in_path_for(resource) if resource.is_a?(User) if User.count == 1 resource.add_role ‘admin‘ end resource end root_path end end |
1
2
3
4
5
6
7
8
9
10
|
class Ability include CanCan::Ability def initialize(user) if user.has_role? :admin can :manage , :all else can :read , :all end end end |
1
2
3
4
5
6
|
<% if user_signed_in? %> <p>The user is loged in .</p> <% if can? :manage , :Home %> <%= link_to "About" , home_about_path %> <% end %> <% end %> |
(完)
Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系
标签:
原文地址:http://www.cnblogs.com/destim/p/5448010.html