diff options
author | Jarka Kadlecová <jarka@gitlab.com> | 2018-08-02 16:16:58 +0200 |
---|---|---|
committer | Jarka Kadlecová <jarka@gitlab.com> | 2018-08-02 16:16:58 +0200 |
commit | 4d4b8f8bbedbfadb49e12df2b123b3528cda4c08 (patch) | |
tree | e4701b090c540811e41c79ab9fd5c2e378c584a3 /app/services/todos | |
parent | e60ec75303475083746e2d09d2a99cc5c6ea0221 (diff) | |
download | gitlab-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.rb | 13 | ||||
-rw-r--r-- | app/services/todos/destroy/group_private_service.rb | 30 |
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 |