diff --git a/app/models/concerns/approvable.rb b/app/models/concerns/approvable.rb index f18a3877fe0c1fcca1945b16912104447baaa7a4..1566c53217d0620686982fbfab89622b841eaf7c 100644 --- a/app/models/concerns/approvable.rb +++ b/app/models/concerns/approvable.rb @@ -47,7 +47,7 @@ def select_from_union(relations) def approved_by?(user) return false unless user - approved_by_users.include?(user) + approvals.where(user: user).any? end def can_be_approved_by?(user) diff --git a/ee/app/models/approval_state.rb b/ee/app/models/approval_state.rb index a095e128905d51846150145a30fedbd622e4b227..c28ab346c74e3e17a58e7c05f89d3174629e2504 100644 --- a/ee/app/models/approval_state.rb +++ b/ee/app/models/approval_state.rb @@ -10,7 +10,7 @@ class ApprovalState attr_reader :merge_request, :project - def_delegators :@merge_request, :merge_status, :approved_by_users, :approvals, :approval_feature_available? + def_delegators :@merge_request, :merge_status, :approved_by_users, :approvals, :approval_feature_available?, :approved_by? alias_method :approved_approvers, :approved_by_users def initialize(merge_request, target_branch: nil) @@ -149,7 +149,7 @@ def can_be_approved_by?(user) return true if unactioned_approvers.include?(user) # Users can only approve once. - return false if approvals.where(user: user).any? + return false if approved_by?(user) # At this point, follow self-approval rules. Otherwise authors must # have been in the list of unactioned_approvers to have been approved. return false if !authors_can_approve? && merge_request.author == user