summaryrefslogtreecommitdiff
path: root/app/services/todos
diff options
context:
space:
mode:
authorJarka Kadlecová <jarka@gitlab.com>2018-08-02 16:16:58 +0200
committerJarka Kadlecová <jarka@gitlab.com>2018-08-02 16:16:58 +0200
commit4d4b8f8bbedbfadb49e12df2b123b3528cda4c08 (patch)
treee4701b090c540811e41c79ab9fd5c2e378c584a3 /app/services/todos
parente60ec75303475083746e2d09d2a99cc5c6ea0221 (diff)
downloadgitlab-ce-4d4b8f8bbedbfadb49e12df2b123b3528cda4c08.tar.gz
Remove group todos when a users looses access
Diffstat (limited to 'app/services/todos')
-rw-r--r--app/services/todos/destroy/entity_leave_service.rb13
-rw-r--r--app/services/todos/destroy/group_private_service.rb30
2 files changed, 41 insertions, 2 deletions
diff --git a/app/services/todos/destroy/entity_leave_service.rb b/app/services/todos/destroy/entity_leave_service.rb
index 2ff9f94b718..b1c4eb95e87 100644
--- a/app/services/todos/destroy/entity_leave_service.rb
+++ b/app/services/todos/destroy/entity_leave_service.rb
@@ -19,7 +19,7 @@ module Todos
override :todos
def todos
if entity.private?
- Todo.where(project_id: project_ids, user_id: user_id)
+ Todo.where('(project_id IN (?) OR group_id IN (?)) AND user_id = ?', project_ids, group_ids, user_id)
else
project_ids.each do |project_id|
TodosDestroyer::PrivateFeaturesWorker.perform_async(project_id, user_id)
@@ -37,7 +37,16 @@ module Todos
when Project
[entity.id]
when Namespace
- Project.select(:id).where(namespace_id: entity.self_and_descendants.select(:id))
+ Project.select(:id).where(namespace_id: group_ids)
+ end
+ end
+
+ def group_ids
+ case entity
+ when Project
+ []
+ when Namespace
+ entity.self_and_descendants.select(:id)
end
end
diff --git a/app/services/todos/destroy/group_private_service.rb b/app/services/todos/destroy/group_private_service.rb
new file mode 100644
index 00000000000..1b00bbe91e1
--- /dev/null
+++ b/app/services/todos/destroy/group_private_service.rb
@@ -0,0 +1,30 @@
+module Todos
+ module Destroy
+ class GroupPrivateService < ::Todos::Destroy::BaseService
+ extend ::Gitlab::Utils::Override
+
+ attr_reader :group
+
+ def initialize(group_id)
+ @group = Group.find_by(id: group_id)
+ end
+
+ private
+
+ override :todos
+ def todos
+ Todo.where(group_id: group.id)
+ end
+
+ override :authorized_users
+ def authorized_users
+ GroupMember.select(:user_id).where(source: group.id)
+ end
+
+ override :todos_to_remove?
+ def todos_to_remove?
+ group&.private?
+ end
+ end
+ end
+end