这次的目标是使用devise+cancan+rolify建立完整的权限管理系统,恩,听起来好高端的样子,其实还是蛮简单的。下面就开始我们的学习吧。
首先,还是先简单介绍一下这几个组件:
devise: 负责用户注册、登录、退出、找回密码等操作。细节参考devise on github
cancan: 负责角色建立、对角色授权、在页面中根据授权是否显示元素,以及模型中超出授权时抛出异常。细节参考rolify on github
rolify: 负责将用户与角色关联。细节参考rolify on github
下面就开始一步步的使用这三个组件。
1.新建一个简单的rails项目(cmd中)
rails new PassPort -d=mysql
2.集成devise
(1).在本地Gemfile包含devise,并再次运行bundle install
gem 'devise' #在Gemfile文件中写
(2).执行devise初始化
rails g devise:install
这句命令会产生一个用户指南,告诉你该做的几件事请,以下是内容翻译(已经去除heroku部署的那一条,增加了登录退出选项的说明):
a. 确定你的环境中有一个缺省的URL,config/environments/development.rb:
config.action_mailer.default_url_options = { :host => 'localhost:3000' }
如果在production环境, :host 必须设置成应用的真实主机名。
b.确定已经在config/routes.rb中定义了root_url(注意删除public下面的index.html), 例如:
root :to => "home#index"
可以使用下面命令生成一个home#index的页面:
rails g controller home index
c.在app/views/layouts/application.html.erb中增加消息提醒,例如:
<p class="notice"><%= notice %></p> <p class="alert"><%= alert %></p>
d.很多时候还需要增加登录、退出的选项:
<% 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 %>
e.如果要定制Devise的view模型,可以再执行以下语句:
rails g devise:views
(3).生成用户模型(你可以使用其他名称代替User),并执行数据迁移
rails g devise User rake db:create #可能需要输入密码 rake db:migrate
(4).在Controller中增加认证过滤,即可在访问该模型页面时转向用户登录页面
在需要认证的模型中,如HomeController,增加下面代码:
before_filter :authenticate_user!
3.集成cancan和rolify
cancan提供对资源的授权控制。例如,在视图中使用can?方法来决定是否显示某个页面元素。如果系统角色非常简单,那么cancan还在代码中直接指定常量就可以支持,具体操作可以参考官方文档。但要提供复杂的角色管理,最好的方案,还是在devise基础上再集成cancan+rolify。
(1)修改Gemfile
gem 'cancan' gem 'rolify'
再次运行bundle install
bundle install
(2)创建cancan的Ability和rolify的Role
rails g cancan:ability rails g rolify:role rake db:migrate
(3)定制devise用户注册事件,可以在注册时赋予用户rolify角色,例如,下面的代码为首个用户赋予admin角色:
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
(4)使用cancan可以为rolify中建立的角色分配授权资源,例如我们为允许admin角色的用户分配针对所有控制类的”manage”资源,而其他用户分配”read”资源:
class Ability include CanCan::Ability def initialize(user) if user.has_role? :admin can :manage, :all else can :read, :all end end end
(5)以上已经实现了“用户-角色-权限”的三层权限模型,在view中就可以使用了。例如,在Home#index页面中增加如下代码:
<% if user_signed_in? %> <p>The user is loged in.</p> <%= link_to "Students", students_path %> <% end %>
(6)使用scaffold生成Student的crud
Scaffold Student name:string sex:string age:integer
(7)启动服务器,验证。
点击下载源码:PassPort源码
相关推荐
《Ruby on Rails Tutorial》中文版(原书第2版,涵盖 Rails 4) Ruby 是一门很美的计算机语言,其设计原则就是“让编程人员快乐”。David Heinemeier Hansson 就是看重了这一点,才在开发 Rails 框架时选择了 Ruby...
### Ruby on Rails 101:深入理解与实践 #### 引言 《Ruby on Rails 101》是一本介绍Ruby on Rails(简称RoR或ROR)的基础书籍,旨在为初学者提供一个全面而深入的学习框架。本书由Peter Marklund编写,包含了五天...
Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails以其“约定优于配置”(Convention over Configuration)...
Ruby on Rails是一款基于Ruby语言的开源Web开发框架,它遵循MVC(模型-视图-控制器)架构模式,简化了Web应用的开发流程。在Linux环境下安装Ruby on Rails需要一系列的依赖包和步骤,本资源包提供了所需的所有组件,...
RUBY ON RAILS入门经典 pdf 电子书 花钱买的和大家共享
《Ruby on Rails 3 Tutorial》是一本专门为初学者设计的指南,旨在帮助读者快速掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的一个开源框架,它采用MVC(Model-View-...
Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在简化Web应用程序的开发。Rails由David Heinemeier Hansson于2004年创建,它提倡“约定优于配置...
### Ruby on Rails Guides v2 - Ruby on Rails 4.2.5 #### 一、重要概念及基础假设 - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:...
《Ruby on Rails for Dummies》是一本专门为初学者设计的Ruby on Rails教程,它旨在帮助新手快速理解并掌握这个强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言构建的一个开源Web应用程序框架,它...
Ruby on Rails,简称Rails,是基于Ruby语言的一个开源Web应用程序框架,它遵循MVC(Model-View-Controller)架构模式,旨在使Web开发过程更加高效、简洁。本压缩包中的"Ruby on Rails入门经典代码"提供了新手学习...
《Ruby on Rails入门权威经典》是一本专门为初学者设计的指南,旨在帮助读者全面掌握Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby编程语言的开源框架,以其“DRY(Don't Repeat ...
Ruby on Rails,简称Rails,是由David Heinemeier Hansson基于Ruby语言开发的一个开源Web应用程序框架。这个框架遵循“约定优于配置”(Convention over Configuration)的原则,致力于简化Web应用的开发流程,提高...
Ruby on Rails,简称Rails,是一款基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在提升开发效率和代码的可读性。Rails以其“约定优于配置”的设计理念,以及“DRY(Don't Repeat ...
Ruby on Rails,简称Rails,是基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-Controller)架构模式,旨在使开发过程更加简洁高效。这个“ruby on rails 教程源码”很可能是为了辅助学习者深入理解Rails的...
本书教您如何使用Ruby on Rails开发和部署真正的,具有工业实力的Web应用程序,Ruby on Rails是为诸如Twitter,Hulu,GitHub和Yellow Pages等顶级网站提供支持的开源Web框架。
Ruby On Rails 框架自它提出之日起就受到广泛关注,在“不要重复自己”,“约定优于配置”等思想的指导下,Rails 带给 Web 开发者的是极高的开发效率。 ActiveRecord 的灵活让你再也不用配置繁琐的 Hibernate 即可...
Ruby on Rails 4 Tutorial 是一本深受开发者欢迎的书籍,它详细介绍了如何使用Ruby on Rails这一强大的Web开发框架。Ruby on Rails(简称Rails)是基于Ruby语言的开源框架,以其“约定优于配置”(Convention over ...
### Ruby on Rails与Java框架对比分析 #### 一、引言 随着互联网技术的迅猛发展,Web开发领域也迎来了各种各样的开发框架和技术栈。在众多的开发框架中,Ruby on Rails (RoR) 和 Java 的相关框架尤其受到关注。本文...