注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

世界的瞭望哨

认识自己 认识世界

 
 
 

日志

 
 

Rails3实现简单用户授权功能  

2012-12-12 23:19:36|  分类: Ruby |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
需求
通过安装Gem在Rails3中实现简单的用户授权(Authorization)功能

配置
Rails 3.2.9

实现步骤
Zz Rails3中加入用户认证功能这篇博文中已经使用Devise这个Gem实现了简单的用户认证
在此基础上给User这个模型追加一个字段role,并且创建2个用户,一个是seller,一个是buyer

mysql> select email,role from users;
+-----------+--------+
| email | role |
+-----------+--------+
| a@126.com | seller |
| b@126.com | buyer |
+-----------+--------+


然后,创建一个scafflod - Book
Rails3实现简单用户授权功能 - 尘泥 - 世界的瞭望哨
完成以上准备后,安装CanCan这个Gem 
安装后,执行

rails g cancan:ability

生成ability.rb文件,并在其中设置用户权限如下所示

class Ability
include CanCan::Ability

def initialize(user)
# Define abilities for the passed in user here. For example:
#
user ||= User.new # guest user (not logged in)
if user.role == 'seller'
can :manage, :all
else
can :read, [Book]
end
#
# The first argument to `can` is the action you are giving the user permission to do.
# If you pass :manage it will apply to every action. Other common actions here are
# :read, :create, :update and :destroy.
#
# The second argument is the resource the user can perform the action on. If you pass
# :all it will apply to every resource. Otherwise pass a Ruby class of the resource.
#
# The third argument is an optional hash of conditions to further filter the objects.
# For example, here the user can only update published articles.
#
# can :update, Article, :published => true
#
# See the wiki for details: https://github.com/ryanb/cancan/wiki/Defining-Abilities
end
end


再在须要设置权限的Controller中加上
Rails3实现简单用户授权功能 - 尘泥 - 世界的瞭望哨
 
至此,我们就可以进行测试啦~
场景一
使用 a@126.com 登陆,这个账号的角色为seller,根据ability.rb这是个超级账号,啥都可以干
测试一下,的确可以创建和删除Book
场景二
使用 b@126.com 登陆,这个账号的角色为buyer,根据ability.rb这个账号只能对Book进行读操作(也就是只能访问index/show这两个Action)
测试一下,尝试删除Book,被拒绝
Rails3实现简单用户授权功能 - 尘泥 - 世界的瞭望哨
 
补充
CanCan要求应用中存在一个current_user方法提供当前用户对象,这里,Devise已经提供了这个方法,无须自己实现
CanCan可以实现很复杂的权限控制,这里只是一个简单应用,更多资料参见
https://github.com/ryanb/cancan
http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-2/
http://www.tonyamoyal.com/2010/07/28/rails-authentication-with-devise-and-cancan-customizing-devise-controllers/
http://www.cnblogs.com/bendanchenzhicheng/archive/2011/09/05/2167451.html
  评论这张
 
阅读(305)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018