]> git.openstreetmap.org Git - rails.git/blob - db/migrate/044_create_user_roles.rb
use a controller method to handle cancan denials
[rails.git] / db / migrate / 044_create_user_roles.rb
1 require "migrate"
2
3 class CreateUserRoles < ActiveRecord::Migration[5.0]
4   def self.up
5     create_enumeration :user_role_enum, %w[administrator moderator]
6
7     create_table :user_roles do |t|
8       t.column :user_id, :bigint, :null => false
9       t.column :role, :user_role_enum, :null => false
10
11       t.timestamps :null => true
12     end
13
14     User.where(:administrator => true).each do |user|
15       UserRole.create(:user_id => user.id, :role => "administrator")
16     end
17
18     remove_column :users, :administrator
19
20     add_foreign_key :user_roles, :users, :name => "user_roles_user_id_fkey"
21   end
22
23   def self.down
24     add_column :users, :administrator, :boolean, :default => false, :null => false
25
26     UserRole.where(:role => "administrator").each do |role|
27       user = User.find(role.user_id)
28       user.administrator = true
29       user.save!
30     end
31
32     drop_table :user_roles
33     drop_enumeration :user_role_enum
34   end
35 end