move the read_ability logic into NotificationRecipient
This commit is contained in:
parent
56a40a2b65
commit
eaa503d679
3 changed files with 18 additions and 21 deletions
|
@ -5,12 +5,10 @@ class NotificationRecipient
|
||||||
custom_action: nil,
|
custom_action: nil,
|
||||||
target: nil,
|
target: nil,
|
||||||
acting_user: nil,
|
acting_user: nil,
|
||||||
read_ability: nil,
|
|
||||||
project: nil
|
project: nil
|
||||||
)
|
)
|
||||||
@custom_action = custom_action
|
@custom_action = custom_action
|
||||||
@acting_user = acting_user
|
@acting_user = acting_user
|
||||||
@read_ability = read_ability
|
|
||||||
@target = target
|
@target = target
|
||||||
@project = project || @target&.project
|
@project = project || @target&.project
|
||||||
@user = user
|
@user = user
|
||||||
|
@ -81,10 +79,10 @@ class NotificationRecipient
|
||||||
return false unless user.can?(:receive_notifications)
|
return false unless user.can?(:receive_notifications)
|
||||||
return false if @project && !user.can?(:read_project, @project)
|
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)
|
return true unless DeclarativePolicy.has_policy?(@target)
|
||||||
|
|
||||||
user.can?(@read_ability, @target)
|
user.can?(read_ability, @target)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -97,6 +95,22 @@ class NotificationRecipient
|
||||||
|
|
||||||
private
|
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
|
def find_notification_setting
|
||||||
project_setting = @project && user.notification_settings_for(@project)
|
project_setting = @project && user.notification_settings_for(@project)
|
||||||
|
|
||||||
|
|
|
@ -76,7 +76,6 @@ module NotificationRecipientService
|
||||||
custom_action: custom_action,
|
custom_action: custom_action,
|
||||||
target: target,
|
target: target,
|
||||||
acting_user: acting_user,
|
acting_user: acting_user,
|
||||||
read_ability: read_ability
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -91,15 +90,6 @@ module NotificationRecipientService
|
||||||
end
|
end
|
||||||
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
|
def custom_action
|
||||||
nil
|
nil
|
||||||
end
|
end
|
||||||
|
@ -285,12 +275,6 @@ module NotificationRecipientService
|
||||||
note.project
|
note.project
|
||||||
end
|
end
|
||||||
|
|
||||||
def read_ability
|
|
||||||
return nil if target.nil?
|
|
||||||
|
|
||||||
:"read_#{target.class.model_name.name.underscore}"
|
|
||||||
end
|
|
||||||
|
|
||||||
def build!
|
def build!
|
||||||
# Add all users participating in the thread (author, assignee, comment authors)
|
# Add all users participating in the thread (author, assignee, comment authors)
|
||||||
add_participants(note.author)
|
add_participants(note.author)
|
||||||
|
|
|
@ -303,7 +303,6 @@ class NotificationService
|
||||||
recipients ||= NotificationRecipientService.notifiable_users(
|
recipients ||= NotificationRecipientService.notifiable_users(
|
||||||
[pipeline.user], :watch,
|
[pipeline.user], :watch,
|
||||||
custom_action: :"#{pipeline.status}_pipeline",
|
custom_action: :"#{pipeline.status}_pipeline",
|
||||||
read_ability: :read_build,
|
|
||||||
target: pipeline
|
target: pipeline
|
||||||
).map(&:notification_email)
|
).map(&:notification_email)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue