summaryrefslogtreecommitdiff
path: root/app/models/member.rb
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-26 09:07:52 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-26 09:07:52 +0000
commit7e019504f5ac6decde690565857238e7e59aa034 (patch)
treefab8832b40e25fc9bc1ae54b9303b95ea146b5d5 /app/models/member.rb
parent116d4e56e83a1f408afe710ce070e699ba206475 (diff)
downloadgitlab-ce-7e019504f5ac6decde690565857238e7e59aa034.tar.gz
Add latest changes from gitlab-org/gitlab@master
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 089efcb81dd..a87efdf63ff 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -100,6 +100,7 @@ class Member < ApplicationRecord
after_destroy :destroy_notification_setting
after_destroy :post_destroy_hook, unless: :pending?
after_commit :refresh_member_authorized_projects
+ after_commit :update_highest_role
default_value_for :notification_level, NotificationSetting.levels[:global]
@@ -459,6 +460,22 @@ class Member < ApplicationRecord
errors.add(:access_level, s_("should be greater than or equal to %{access} inherited membership from group %{group_name}") % error_parameters)
end
end
+
+ # Triggers the service to schedule a Sidekiq job to update the highest role
+ # for a User
+ #
+ # The job will be called outside of a transaction in order to ensure the changes
+ # for a Member to be commited before attempting to update the highest role.
+ # rubocop: disable CodeReuse/ServiceClass
+ def update_highest_role
+ return unless user_id.present?
+ return unless previous_changes[:access_level].present?
+
+ run_after_commit_or_now do
+ Members::UpdateHighestRoleService.new(user_id).execute
+ end
+ end
+ # rubocop: enable CodeReuse/ServiceClass
end
Member.prepend_if_ee('EE::Member')