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