権限の管理

http://blog.takeda-soft.jp/blog/show/218

http://d.hatena.ne.jp/yuichi_katahira/20070926/1190770131
で権限をどう管理するかという話が出ています。
俺持論を展開すると、権限は継承の関係にあるのがほとんどで、
UserとManagerとAdministratorみたいなもんで、
AdministratorはUserとManagerの全ての権限があります。
その場合、Userのテーブルを用意して、

create_table "users", :force => true do |t|
  t.column "name",                     :string
end

こんなUserモデルを継承し、

def User < ActiveRecord::Base
  def perm_of?(klass=nil)
    klass ? is_a?(klass) : nil
  end
end
def Manager < User
end
def Administrator < Manager
end

こんな感じで定義すると、

./script/runner 'p Administrator.find(:first).perm_of?(Manager)'
 true
./script/runner 'p Manager.find(:first).perm_of?(Administrator)'
 false
./script/runner 'p Manager.find(:first).perm_of?(User)'
 true

こんな感じです。
単純な権限管理なのですが、SuperClassに継承先の定義を書くのがなんとなく好きじゃないもので、
こんなのがいいなと思っています。