Chinaunix首页 | 论坛 | 博客
  • 博客访问: 40254
  • 博文数量: 27
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-24 00:44
文章分类
文章存档

2011年(1)

2009年(26)

我的朋友
最近访客

分类: Java

2009-05-20 14:53:40

用rails做验证和授权系统并不复杂,但通过安装插件的方式可以减少重复劳动。
restful_authentication是一个验证系统,支持rails2.0,提供了简单的用户注册登录注销、简单的验证等功能。
role_requirement是授权系统,能和restful_authentication很好的结合,该插件提供了授权的基本实现。

安装和配置:
步骤1:安装restful_authentication
命令行下:

ruby script/plugin install restful_authentication/
ruby script/generate authenticated user sessions

第一步是安装插件。第二步生成文件,里面的user代表生成的模型的名称,可选–include-activation参数决定是否生成向新注册用户发送激活码的代码。

步骤2:安装role_requirement

ruby script/plugin install
ruby script/generate roles Role User

第一步安装插件,第二步是生成文件结构并设置角色和用户之间的多对多关系。

这样,两个插件就基本安装配置完了,还需要修改一些东西:

1、由于一开始生成的restful_authentication的模型是user,在user.rb模型文件里,注释掉“attr_protected :roles”,因为会和“attr_accessible”发生冲突(这两个方法是黑名单和白名单的作用,只能用一个)。

2、可以在路由配置里加入:
Java代码 复制代码
  1. map.signup '/signup', :controller => 'users', :action => 'new'  
  2. map.login '/login', :controller => 'sessions', :action => 'new'  
  3. map.logout '/logout', :controller => 'sessions', :action => 'destroy' 
然后在模板里加入:
Java代码 复制代码
  1. <% if logged_in? %>      
  2.   

    你以<%=h current_user.login %>的身份登录

      
  3.   

    <%= link_to '注销', logout_path %>

      
  4. <% else %>   
  5.   

    你还没有登录。

      
  6.   

      

  7.     <%= link_to '登录', login_path %> or   
  8.     <%= link_to '注册', signup_path %>   
  9.   

      
  10. <% end %> 
看,我们的验证插件已经很好工作了。

注:如果需要更强大验证功能,可查看:http: //, 这个增强版的插件包含了邮件激活、修改密码、忘记密码等功能。但是修改密码和忘记密码存在安全隐患,请修改后使用。

3、由于 role_requirement插件生成的文件不全,可以用scaffold命令重新生成role的缺失文件。在role.rb里加上了 has_and_belongs_to_many :users。scaffold好后,添加一个新的角色“admin”,然后通过调用“role.users”来给“admin”添加成员。这样我们就可 以来使用require_role方法来授权,这个方法比较强大。

如在控制器前添加:
Java代码 复制代码
  1. require_role "admin" 
注意:如果需要在Role和User的连接表添加更详细的内容,则不适合使用roles_users连接表,可新建模型并通过through方法连接User和Role。

阅读(682) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~