diff options
Diffstat (limited to 'app/models/members/member_role.rb')
-rw-r--r-- | app/models/members/member_role.rb | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/app/models/members/member_role.rb b/app/models/members/member_role.rb index 36cbc97d049..42ce228c318 100644 --- a/app/models/members/member_role.rb +++ b/app/models/members/member_role.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass +class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass include IgnorableColumns ignore_column :download_code, remove_with: '15.9', remove_after: '2023-01-22' @@ -15,6 +15,8 @@ class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass validates_associated :members + before_destroy :prevent_delete_after_member_associated + private def belongs_to_top_level_namespace @@ -35,4 +37,13 @@ class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass errors.add(:base, s_("MemberRole|cannot be changed because it is already assigned to a user. "\ "Please create a new Member Role instead")) end + + def prevent_delete_after_member_associated + return unless members.present? + + errors.add(:base, s_("MemberRole|cannot be deleted because it is already assigned to a user. "\ + "Please disassociate the member role from all users before deletion.")) + + throw :abort # rubocop:disable Cop/BanCatchThrow + end end |