class CreateRoleAssignments < ActiveRecord::Migration
  def self.up
    create_table :role_assignments do |t|
      t.column :user_id,       :integer,   :null => false, 
        :foreign_key => { :on_delete => :cascade }
      t.column :role_id,       :integer,   :null => false,
        :foreign_key => { :on_delete => :cascade }

      # Another approach to the "substitute for user" problem ---
      # role assignments parameterized by user, with params that
      # can be picked up in permissions.  (A generalization of
      # "owned by me"; "owned by [whoever spec'ed in assignment;
      # usually me but not necessarily]".

      t.column :default_user_id, :integer, :null => true,
        :foreign_key => { :table => :users, :on_delete => :cascade,
                          :name => 'fk_role_assign_user' }
      t.column :default_firm_id, :integer, :null => true,
        :foreign_key => { :table => :firms, :on_delete => :cascade,
                          :name => 'fk_role_assign_role' }

      # Default UDFs????

      t.column :invalid_after, :datetime, :null => true
      t.column :created_at,    :datetime, :null => false
      t.column :updated_at,    :datetime, :null => false
    end
  end

  def self.down
    drop_table :role_assignments
  end
end

