diff options
Diffstat (limited to 'app/models/members/member_role.rb')
-rw-r--r-- | app/models/members/member_role.rb | 11 |
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? |