Rails学习笔记之Typo登陆认证与授权

只是写出自己觉得不错的看点,供新手参考. 由ApplicationController统一include LoginSystem module. 代码放在目录vendor/plugins/typo_login_system

小技巧一: vendor/plugins/typo_login_system/lib/login_system.rb

  def self.included(base)
  base.send :helper_method, :current_user, :logged_in?
  end

利用include module的回调方法included,把current_user, logged_in?添加到helper,这样在view也可以调用这两个方法 另外它的login_form_系列方法的实现也很值得看.

小技巧二:

  def current_user</p>

<pre><code>@current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie || :false)
</code></pre>

<p>  end

利用 ||= ,把当前用户保存到实例变量@current_user中,这样控制器实例第二次调用的时候,就不需要再运行后面的代码.

Typo::AccessControl的实现有点复杂,它是yield的常用手法的一个实现
授权基本角色,权限控制细粒度到controller,无法控制到action
从vendor/plugins/typo_login_system/lib/access_control.rb 文件的注释示例进行简单的分析.
类方法map需要传一个Hash,:require的值可以是数组或字符串,这里写角色名,每调用一次类方法,会生成一个Mapper实例,yield后,再把Mapper实例保存到@mappers
而@mappers运行时是唯一的,所以当你多次调用类方法map,把它其生成的所有Mapper实例都保存到@mappers这个数组里.

Mapper数据结构::
Mapper
  --roles
  --controllers
  --project_modules
    --controllers

验证是否可以有权限
通过@mappers拿到包含指定role name的所有Mapper实例,把mapper的controllers和其拥有的所有project_modules的controllers合并成一个数组,判断访问的控制器名是否在此数组里

Typo的角色权限定义可以看config/initializers/access_rules.rb

功能不是很强大,但满意一般的小应用场合.

Rails学习笔记之Typo安装

选择Typo作为学习目标.原因有三点:

  1. 更像我们平常开发的Rails应用,对Rails动刀的地方不多,容易看懂.
  2. 博客项目,复杂度相对来说比较简单,功能也不少.
  3. 有测试,分析起来很轻松.

从安装分析起.我也是半吊子,写的不好,请多多指教.
安装路径是/setup,Controller是Setup,从此Controller的RSpec可以看出,进行setup操作,数据库里需要有一条Blog数据,不然会报错的.

GET setup时,会调用ApplicationController的this_blog方法. this_blog方法默认拿到Blog的第一条记录
POST setup用的是同一个方法,用http method来区分,提交表单用post. 成功后会重定向到 /setup/confirm
此操作应该会生成一个用户,和初始化博客设置.

汗,貌似我在翻译Typo的RSpec.Stop,看到觉得不错的再分享.

text_field的placeholder属性挺不错的,输入提示用的,获取到光标时自动隐藏.不过是HTML5特性

generate_password方法用的upto,其实times实现更优美.

1.upto(7) { |i| newpass &lt;&lt; chars[rand(chars.size-1)] } 

7.times { newpass &lt;&lt; chars[rand(chars.size-1)] }