Show inventory activities based on access (just show deleted inventories) [SCI-12224]

This commit is contained in:
Martin Artnik 2025-08-13 11:36:34 +02:00
parent b3145f9caa
commit 6a02cbae25

View file

@ -36,23 +36,33 @@ class ActivitiesService
visible_projects = Project.readable_by_user(user, teams)
visible_my_modules = MyModule.readable_by_user(user, teams)
visible_forms = Form.readable_by_user(user, teams)
# Temporary solution until handling of deleted subjects is fully implemented
visible_repository_teams = user.teams.with_granted_permissions(user, RepositoryPermissions::READ, teams)
visible_repositories = Repository.readable_by_user(user, teams)
deleted_repository_activities =
activities.where(subject_type: %w(RepositoryBase RepositoryRow))
.joins("LEFT OUTER JOIN repositories ON (activities.subject_id = repositories.id AND activities.subject_type = 'RepositoryBase')")
.joins("LEFT OUTER JOIN repository_rows ON (activities.subject_id = repository_rows.id AND activities.subject_type = 'RepositoryRow')")
.where("(activities.subject_type = 'RepositoryBase' AND repositories.id IS NULL) OR
(activities.subject_type = 'RepositoryRow' AND repository_rows.id IS NULL)")
activities = Activity.from(activities, 'activities')
activities = activities.where(project: nil, team_id: teams).where.not(subject_type: %w(RepositoryBase RepositoryRow Protocol Form))
.or(activities.where(subject_type: %w(RepositoryBase RepositoryRow), team_id: visible_repository_teams.select(:id)))
.or(activities.where(id: deleted_repository_activities.select(:id)))
.or(activities.where(subject_type: 'Protocol', subject_id: Protocol.readable_by_user(user, teams).select(:id)))
.or(activities.where(project_id: visible_projects.select(:id)).where.not(subject_type: %w(Experiment MyModule Result Protocol)))
.or(activities.where(subject_type: 'Experiment', subject_id: Experiment.readable_by_user(user, teams).select(:id)))
.or(activities.where("subject_id IN (?) AND subject_type = 'MyModule' OR " \
"subject_id IN (?) AND subject_type = 'Result' OR " \
"subject_id IN (?) AND subject_type = 'Protocol' OR " \
"subject_id IN (?) AND subject_type = 'Form'",
"subject_id IN (?) AND subject_type = 'Form' OR " \
"subject_id IN (?) AND subject_type = 'RepositoryBase' OR " \
"subject_id IN (?) AND subject_type = 'RepositoryRow'",
visible_my_modules.select(:id),
Result.with_discarded.where(my_module: visible_my_modules).select(:id),
Protocol.where(my_module: visible_my_modules).select(:id),
visible_forms.select(:id)))
visible_forms.select(:id),
visible_repositories.select(:id),
RepositoryRow.where(repository_id: visible_repositories).select(:id)))
activities.order(created_at: :desc)
.page(filters[:page])