diff --git a/app/services/filtering_service.rb b/app/services/filtering_service.rb index 76a3d71..9297454 100644 --- a/app/services/filtering_service.rb +++ b/app/services/filtering_service.rb @@ -24,10 +24,10 @@ class FilteringService @current_user = current_user @params = params - items = by_scope + items = init_collection + items = by_scope(items) items = by_state(items) items = by_group(items) - items = by_project(items) items = by_search(items) items = by_milestone(items) items = by_assignee(items) @@ -37,24 +37,30 @@ class FilteringService private - def by_scope + def init_collection table_name = klass.table_name + return klass.of_projects(Project.public_only) unless current_user + + if project + if current_user.can?(:read_project, project) + project.send(table_name) + else + [] + end + else + klass.of_projects(current_user.authorized_projects) + end + end + + def by_scope(items) case params[:scope] when 'created-by-me', 'authored' then - current_user.send(table_name) + klass.where(author_id: current_user.id) when 'all' then - if current_user - if project && (project.public? || project.internal?) - klass.of_projects(Project.public_or_internal_only(current_user)) - else - klass.of_projects(current_user.authorized_projects.pluck(:id)) - end - else - klass.of_projects(Project.public_only) - end + klass when 'assigned-to-me' then - current_user.send("assigned_#{table_name}") + klass.where(assignee_id: current_user.id) else raise 'You must specify default scope' end -- libgit2 0.21.2