権限の管理
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に継承先の定義を書くのがなんとなく好きじゃないもので、
こんなのがいいなと思っています。