rails3beta4 + devise + cancan 打造权限管理系统
为后面的项目做准备, 先拿来练练手。
rails的环境搭建不再重复,先新建项目
rails new passport -d=postgresql
配置postgresql的帐号密码
rake db:create
启动rails,查看http://localhost:3000,一切正常
配置Gemfile
gem 'devise','1.1.rc2' gem 'cancan' gem 'haml' gem 'rails3-generators',:group => :development
开始安装Gem
bundle install
将haml作为默认模板,编辑config/application.rb
config.time_zone = 'Beijing' config.i18n.default_locale = 'zh-CN' config.generators do |g| g.template_engine :haml end
安装haml
rails g haml:install
安装devise
rails g devise:install
使用devise工具生成user
rails g devise user
rails g controller home index
修改route,将默认页面转到home页面,在home_controller里加上一行
before_filter :authenticate_user!
执行migrate, 重新打开页面,便会跳转到http://localhost:3000/users/sign_in
说明devise安装成功
后面准备中文化操作
现在将整个页面汉化一下
首先,我们已经在application.rb里配置了local为 zh-CN, 然后到
http://github.com/tsechingho/rails-i18n/blob/master/rails/locale/zh-CN.yml
下载已经配置好的中文包到config/locales里,这样,rails的中文化已经做好了。
接下在做devise的汉化。
devise自己有自己的i18n文件,所以我们将config/locales里的devise.en.yml重命名为devise.zh-CN.yml,将里面的英文翻译为中文即可。
接下来做view上面的汉化
首先执行
rails g devise:views
就会在views下面生成devise的默认页面, 在里面进行修改即可(这一步生成的页面是erb).
接下来是cancan,负责授权工作
首先,建立app/models/ability.rb,内容如下:
class Ability include CanCan::Ability def initialize(user) if user.role == 'admin' can :manage,:all else can :read,:all end end end
在app/models/user.rb里加入
class User < ActiveRecord::Base ROLES = %w[admin moderator author banned] end
在user.rb里加个字段
script/generate migration add_role_to_users role:string rake db:migrate
这样,就可以在views里调用can?或着cannot?方法来判断用户角色
<% if can? :update,@article %> <%= link_to "Edit",edit_article_path(@article) %> <% end %>