Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系

devise、cancan和rolify这三个组件结合,可以建立完整而强大的用户权限模型。

  • devise介绍,负责用户注册、登录、退出、找回密码等操作。细节参考devise on github
  • cancan介绍, 负责角色建立、对角色授权、在页面中根据授权是否显示元素,以及模型中超出授权时抛出异常。细节参考rolify on github
  • rolify介绍,负责将用户与角色关联。细节参考rolify on github

下面就简单介绍下这三者结合使用的方法,比较浅,深层次的大家自己去看文档挖掘,这里仅仅介绍最基本的使用。

运行环境

这里我用的是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

执行devise初始化

$ 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

生成用户模型(你可以使用其他名称代替User),并执行数据迁移

$ rails g devise User
$ rake db:migrate

在Controller中增加认证过滤,即可在访问该模型页面时转向用户登录页面(这自行没验证)

在需要认证的模型中,如HomeController,增加下面代码:

before_filter :authenticate_user!

集成cancan和rolify

cancan提供对资源的授权控制。例如,在视图中使用can?方法来决定是否显示某个页面元素。如果系统角色非常简单,那么cancan还在代码中直接指定常量就可以支持,具体操作可以参考官方文档。但要提供复杂的角色管理,最好的方案,还是在devise基础上再集成cancan+rolify。

1. 修改Gemfile,并再次运行bundle install

gem ‘cancan‘
gem ‘rolify‘

2. 创建cancan的Ability和rolify的Role

$ rails generate cancan:ability
$ rails generate rolify Role User
$ rake db:migrate

3. 定制devise用户注册事件,可以在注册时赋予用户rolify角色,例如,下面的代码为首个用户赋予admin角色:

?


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

4. 使用cancan可以为rolify中建立的角色分配授权资源,例如我们为允许admin角色的用户分配针对所有控制类的”manage”资源,而其他用户分配”read”资源:

?


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

5. 以上已经实现了“用户-角色-权限”的三层权限模型,在view中就可以使用了。例如,在Home#index页面中增加如下代码:

?


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 %>

(完)

时间: 2024-10-11 05:27:16

Ruby on Rails: 使用devise+cancan+rolify建立完整的权限管理系的相关文章

CentOS系统搭建Ruby On Rails平台

本文系统CentOS6.5 x64 Ruby On Rails是一个用Ruby语言写的开源Web框架,和J2EE,PHP等类似.Ruby On Rails是一个非常优美的Web开发框架,并且融入了敏捷开发的精髓:约定大于配置.你会发现,它真的是一个非常优美的框架!今天我们介绍如何在 Centos下搭建Ruby On Rails开发环境. Tips: Ruby Version Manager,Ruby版本管理器,包括Ruby的版本管理和Gem库管理(gemset).目前支持Ruby的大多数版本,有

[Ruby on Rails系列]3、初试Rails:使用Rails开发第一个Web程序

本系列前两部分已经介绍了如何配置Ruby on Rails开发环境,现在终于进入正题啦! Part1.开发前的准备 本次的主要任务是开发第一个Rails程序.需要特别指出的是,本次我选用了一个(PaaS开发平台),也就是Rails教程中介绍的Cloud 9平台,该平台已经自动为我们作好了环境配置的工作:只要你有一个浏览器就可以使用该云端开发环境.非常的方便快捷!简直赞!平台网址如下:https://c9.io/ Cloud 9开发平台的实质是为每一个注册的开发者在服务器端分配一个Linux虚拟机

[Ruby on Rails系列]2、开发环境准备:Ruby on Rails开发环境配置

前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完成Ruby on Rails开发环境的配置. 在配置环境之前,首先要解释一下Scientific Linux 6.x,该Linux发行版与CentOS.Red Hat Linux的管理机制比较类似.如果你的Linux采用的是上述系统,基本上配置过程完全一致:如果你采用的是Ubuntu系统,配置过程可能会稍有不同. 那么,Start![请以管理员账号登陆

ubuntu 14.04中安装 ruby on rails 环境(填坑版) 呕血推荐

环境:在win7 上Vmware虚拟机环境中安装的ubuntu 14.04 开发相关: ruby 2.2.0 rails 4.2.0 sublime text 3 本文说明:所有的命令均在$ 之后,若$前边带有信息,只是为了方便你理解和与自己对照. 安装过程中由于这样那样的原因,产生许多坑,所谓坑是对初学者来说,大牛们飘过吧. 步骤1.从官网下载ubuntu 14.04 X64 http://124.205.69.136/files/2013000000502943/202.141.176.11

Ruby on Rails开发Web应用的基本概念

Web应用架构 C/S架构 Web应用从最初就採用C/S架构.Server负责监听client请求,提供资源,Client向server发起请求并渲染页面.两者通过TCP/IP协议栈之上的HTTP协议通信. 多层架构 在Web 2.0时代,随着交互性的要求,这个架构变得更为复杂.Server须要提供更复杂的服务,Client也要完毕很多其它的交互任务,涌现出非常多新的提供更快更好服务的技术.对应的,C/S架构须要以一种更复杂的方式来组织,即多层架构. 多层架构中的每一层负责提供一个特定的功能,与

nginx+passenger+mina+ruby on rails 实战部署

一.利用passenger-install-nginx-module 安装: 先安装passenger: gem install passenger,如果没有权限就在前面加上sudo. 由于nginx不支持动态的模块载入,所以要使用passenger来进行编译安装由passenger修改过的nginx 用passenger安装nginx: passenger-install-nginx-module 按照提示,一步步安装. 在nginx的配置文件(默认在/opt/nginx/conf/目录下)里

用 Ubuntu 12.04 搭建一个 Ruby on Rails 本地开发环境

转载,原文链接 http://linux.cn/portal.php?mod=view&aid=170 用 Ubuntu 搭建一个 Ruby on Rails 本地开发环境 想要开发 Ruby on Rails 应用吗?虽然已经有一些(初级的)Ruby on Rails 教程了,但是似乎在如何搭建一个简洁而更新的本地开发环境方面还有些不甚确定的地方. 这个教程将引导你通过几个步骤来搭建一个基于 Ubuntu 的 Ruby on Rails 本地开发环境.而这个教程的即将发布的第二部分,将帮助你搭

[Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)

[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Rails开发环境配置 [Ruby on Rails系列]3.初试Rails:使用Rails开发第一个Web程序 [Ruby on Rails系列]4.专题:Rails应用的国际化[i18n] [Ruby on Rails系列]5.专题:Talk About SaSS [1]任务目标 本次主要是要实现一

Elasticsearch 的_msearch介绍及在ruby on rails 中的使用

一.基本介绍 _msearch就是multi search API使用的末端,它可以在一个相同的api中去执行多个查询请求. 请求的格式类似于大部API的格式,它的请求格式如下: header\n body\n header\n body\n header可以包含要查询的索引(可以是多个索引),可选的映射类型,还有search_type, preference和routing. body可以包含指定的搜索请求(包括:query.aggregations.from.size等等). 例子见官网:h