diff --git a/app/models/issue.rb b/app/models/issue.rb index 4f2773f4147012a9c0463f9a9d100626cea00a04..c14dcd938615daca3eb02b2023668415072cf7e7 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -584,7 +584,7 @@ def update_upvotes_count def readable_by?(user) if user.can_read_all_resources? true - elsif project.owner == user + elsif project.personal? && project.team.owner?(user) true elsif confidential? && !assignee_or_author?(user) project.team.member?(user, Gitlab::Access::REPORTER) diff --git a/app/models/project_team.rb b/app/models/project_team.rb index 8061554006d72791f7ee9a523d9fc34ac25c5b02..c3c7508df9f391462dcc96c174e4111e2e666e12 100644 --- a/app/models/project_team.rb +++ b/app/models/project_team.rb @@ -107,6 +107,10 @@ def owners end end + def owner?(user) + owners.include?(user) + end + def import(source_project, current_user = nil) target_project = project diff --git a/spec/models/project_team_spec.rb b/spec/models/project_team_spec.rb index c0bad96effc1513d60f41f9a82be6fc20253c57a..d5af2d8090634c807b65417061b3735292a67aed 100644 --- a/spec/models/project_team_spec.rb +++ b/spec/models/project_team_spec.rb @@ -77,6 +77,32 @@ end end + describe 'owner methods' do + context 'personal project' do + let(:project) { create(:project) } + let(:owner) { project.owner } + + specify { expect(project.team.owners).to contain_exactly(owner) } + specify { expect(project.team.owner?(owner)).to be_truthy } + end + + context 'group project' do + let(:group) { create(:group) } + let(:project) { create(:project, group: group) } + let(:user1) { create(:user) } + let(:user2) { create(:user) } + + before do + group.add_owner(user1) + group.add_owner(user2) + end + + specify { expect(project.team.owners).to contain_exactly(user1, user2) } + specify { expect(project.team.owner?(user1)).to be_truthy } + specify { expect(project.team.owner?(user2)).to be_truthy } + end + end + describe '#fetch_members' do context 'personal project' do let(:project) { create(:project) }