diff --git a/app/controllers/registrations_controller.rb b/app/controllers/registrations_controller.rb index 8347365e9..0edbe7905 100644 --- a/app/controllers/registrations_controller.rb +++ b/app/controllers/registrations_controller.rb @@ -40,6 +40,7 @@ class RegistrationsController < Devise::RegistrationsController def update_first_user_permissions(resource) return unless Settings::General.waiting_on_first_user + resource.add_role(:creator) resource.add_role(:super_admin) resource.add_role(:trusted) resource.skip_confirmation! diff --git a/app/models/role.rb b/app/models/role.rb index 8ab2158b4..985351a39 100644 --- a/app/models/role.rb +++ b/app/models/role.rb @@ -16,6 +16,7 @@ class Role < ApplicationRecord trusted warned workshop_pass + creator ].freeze has_and_belongs_to_many :users, join_table: :users_roles # rubocop:disable Rails/HasAndBelongsToMany diff --git a/lib/data_update_scripts/20210824202334_backfill_creator_role_for_first_super_admin.rb b/lib/data_update_scripts/20210824202334_backfill_creator_role_for_first_super_admin.rb new file mode 100644 index 000000000..b300ba655 --- /dev/null +++ b/lib/data_update_scripts/20210824202334_backfill_creator_role_for_first_super_admin.rb @@ -0,0 +1,7 @@ +module DataUpdateScripts + class BackfillCreatorRoleForFirstSuperAdmin + def run + User.with_role(:super_admin).first&.add_role(:creator) + end + end +end diff --git a/spec/lib/data_update_scripts/backfill_creator_role_for_first_super_admin_spec.rb b/spec/lib/data_update_scripts/backfill_creator_role_for_first_super_admin_spec.rb new file mode 100644 index 000000000..d8b8a51f1 --- /dev/null +++ b/spec/lib/data_update_scripts/backfill_creator_role_for_first_super_admin_spec.rb @@ -0,0 +1,15 @@ +require "rails_helper" +require Rails.root.join( + "lib/data_update_scripts/20210824202334_backfill_creator_role_for_first_super_admin", +) + +describe DataUpdateScripts::BackfillCreatorRoleForFirstSuperAdmin do + let!(:creator) { create(:user, :super_admin) } + let!(:admin) { create(:user, :super_admin) } + + it "Only the first super admin should have the creator role" do + described_class.new.run + expect(creator).to have_role(:creator) + expect(admin).not_to have_role(:creator) + end +end diff --git a/spec/models/role_spec.rb b/spec/models/role_spec.rb index 76a14b07f..107fb12dd 100644 --- a/spec/models/role_spec.rb +++ b/spec/models/role_spec.rb @@ -10,7 +10,7 @@ RSpec.describe Role, type: :model do expected_roles = %w[ admin chatroom_beta_tester codeland_admin comment_suspended mod_relations_admin podcast_admin restricted_liquid_tag single_resource_admin super_admin support_admin suspended tag_moderator tech_admin - trusted warned workshop_pass + trusted warned workshop_pass creator ] expect(described_class::ROLES).to eq(expected_roles) end