diff --git a/app/models/notification_recipient.rb b/app/models/notification_recipient.rb
index c307f0ad5b6537cfd66b7537c1322f0ced3c954f..418b42d8f1dd0ed2e4f581e7529f4adc987fe676 100644
--- a/app/models/notification_recipient.rb
+++ b/app/models/notification_recipient.rb
@@ -5,12 +5,10 @@ class NotificationRecipient
     custom_action: nil,
     target: nil,
     acting_user: nil,
-    read_ability: nil,
     project: nil
   )
     @custom_action = custom_action
     @acting_user = acting_user
-    @read_ability = read_ability
     @target = target
     @project = project || @target&.project
     @user = user
@@ -81,10 +79,10 @@ class NotificationRecipient
       return false unless user.can?(:receive_notifications)
       return false if @project && !user.can?(:read_project, @project)
 
-      return true unless @read_ability
+      return true unless read_ability
       return true unless DeclarativePolicy.has_policy?(@target)
 
-      user.can?(@read_ability, @target)
+      user.can?(read_ability, @target)
     end
   end
 
@@ -97,6 +95,22 @@ class NotificationRecipient
 
   private
 
+  def read_ability
+    return @read_ability if instance_variable_defined?(:@read_ability)
+
+    @read_ability =
+      case @target
+      when Issuable
+        :"read_#{@target.to_ability_name}"
+      when Ci::Pipeline
+        :read_build # We have build trace in pipeline emails
+      when ActiveRecord::Base
+        :"read_#{@target.class.model_name.name.underscore}"
+      else
+        nil
+      end
+  end
+
   def find_notification_setting
     project_setting = @project && user.notification_settings_for(@project)
 
diff --git a/app/services/notification_recipient_service.rb b/app/services/notification_recipient_service.rb
index 5d394f6763189d2a417eea6d72629cca9429ba18..7d4f8110f843853b357c73166361b103005fe67e 100644
--- a/app/services/notification_recipient_service.rb
+++ b/app/services/notification_recipient_service.rb
@@ -76,7 +76,6 @@ module NotificationRecipientService
           custom_action: custom_action,
           target: target,
           acting_user: acting_user,
-          read_ability: read_ability
         )
       end
 
@@ -91,15 +90,6 @@ module NotificationRecipientService
           end
       end
 
-      def read_ability
-        case target
-        when Issuable
-          :"read_#{target.to_ability_name}"
-        when Ci::Pipeline
-          :read_build # We have build trace in pipeline emails
-        end
-      end
-
       def custom_action
         nil
       end
@@ -285,12 +275,6 @@ module NotificationRecipientService
         note.project
       end
 
-      def read_ability
-        return nil if target.nil?
-
-        :"read_#{target.class.model_name.name.underscore}"
-      end
-
       def build!
         # Add all users participating in the thread (author, assignee, comment authors)
         add_participants(note.author)
diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index c93f82999dc5d016148fca96ab9ae1ff796f0deb..2e52296f048d19193c26ad2e776234b550bda26c 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -303,7 +303,6 @@ class NotificationService
     recipients ||= NotificationRecipientService.notifiable_users(
       [pipeline.user], :watch,
       custom_action: :"#{pipeline.status}_pipeline",
-      read_ability: :read_build,
       target: pipeline
     ).map(&:notification_email)