summaryrefslogtreecommitdiff
path: root/app/models/members/member_role.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/members/member_role.rb')
-rw-r--r--app/models/members/member_role.rb11
1 files changed, 11 insertions, 0 deletions
diff --git a/app/models/members/member_role.rb b/app/models/members/member_role.rb
index 42ce228c318..77e97a35b6d 100644
--- a/app/models/members/member_role.rb
+++ b/app/models/members/member_role.rb
@@ -4,12 +4,15 @@ class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass
include IgnorableColumns
ignore_column :download_code, remove_with: '15.9', remove_after: '2023-01-22'
+ MAX_COUNT_PER_GROUP_HIERARCHY = 10
+
has_many :members
belongs_to :namespace
validates :namespace, presence: true
validates :base_access_level, presence: true
validate :belongs_to_top_level_namespace
+ validate :max_count_per_group_hierarchy, on: :create
validate :validate_namespace_locked, on: :update
validate :attributes_locked_after_member_associated, on: :update
@@ -25,6 +28,14 @@ class MemberRole < ApplicationRecord # rubocop:disable Gitlab/NamespacedClass
errors.add(:namespace, s_("MemberRole|must be top-level namespace"))
end
+ def max_count_per_group_hierarchy
+ return unless namespace
+ return if namespace.member_roles.count < MAX_COUNT_PER_GROUP_HIERARCHY
+
+ errors.add(:namespace, s_("MemberRole|maximum number of Member Roles are already in use by the group hierarchy. "\
+ "Please delete an existing Member Role."))
+ end
+
def validate_namespace_locked
return unless namespace_id_changed?