Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/member.rb')
-rw-r--r--app/models/member.rb17
1 files changed, 17 insertions, 0 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index 80c5fd7e468..107530daf51 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -61,6 +61,7 @@ class Member < ApplicationRecord
validate :access_level_inclusion
validate :validate_member_role_access_level
validate :validate_access_level_locked_for_member_role, on: :update
+ validate :validate_member_role_belongs_to_same_root_namespace
scope :with_invited_user_state, -> do
joins('LEFT JOIN users as invited_user ON invited_user.email = members.invite_email')
@@ -515,12 +516,22 @@ class Member < ApplicationRecord
end
end
+ def validate_member_role_belongs_to_same_root_namespace
+ return unless member_role_id
+
+ return if member_namespace.id == member_role.namespace_id
+ return if member_namespace.root_ancestor.id == member_role.namespace_id
+
+ errors.add(:member_namespace, _("must be in same hierarchy as custom role's namespace"))
+ end
+
def send_invite
# override in subclass
end
def send_request
notification_service.new_access_request(self)
+ todo_service.create_member_access_request(self) if source_type != 'Project'
end
def post_create_hook
@@ -579,6 +590,12 @@ class Member < ApplicationRecord
end
# rubocop: enable CodeReuse/ServiceClass
+ # rubocop: disable CodeReuse/ServiceClass
+ def todo_service
+ TodoService.new
+ end
+ # rubocop: enable CodeReuse/ServiceClass
+
def notifiable_options
{}
end