Always allow references to the current project
This commit is contained in:
parent
f42cfa9e87
commit
72afcbcd37
|
@ -61,7 +61,6 @@ module Mentionable
|
||||||
|
|
||||||
ext = Gitlab::ReferenceExtractor.new(p, current_user)
|
ext = Gitlab::ReferenceExtractor.new(p, current_user)
|
||||||
ext.analyze(text)
|
ext.analyze(text)
|
||||||
|
|
||||||
(ext.issues + ext.merge_requests + ext.commits).uniq - [local_reference]
|
(ext.issues + ext.merge_requests + ext.commits).uniq - [local_reference]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ module Gitlab
|
||||||
reference_type = node.attr('data-reference-filter')
|
reference_type = node.attr('data-reference-filter')
|
||||||
reference_filter = reference_type.constantize
|
reference_filter = reference_type.constantize
|
||||||
|
|
||||||
reference_filter.user_can_reference?(current_user, node)
|
reference_filter.user_can_reference?(current_user, node, context)
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
end
|
end
|
||||||
|
|
|
@ -15,9 +15,12 @@ module Gitlab
|
||||||
# Results:
|
# Results:
|
||||||
# :references - A Hash of references that were found and replaced.
|
# :references - A Hash of references that were found and replaced.
|
||||||
class ReferenceFilter < HTML::Pipeline::Filter
|
class ReferenceFilter < HTML::Pipeline::Filter
|
||||||
def self.user_can_reference?(user, node)
|
def self.user_can_reference?(user, node, context)
|
||||||
if node.has_attribute?('data-project')
|
if node.has_attribute?('data-project')
|
||||||
project = Project.find(node.attr('data-project')) rescue nil
|
project_id = node.attr('data-project').to_i
|
||||||
|
return true if project_id == context[:project].id
|
||||||
|
|
||||||
|
project = Project.find(project_id) rescue nil
|
||||||
Ability.abilities.allowed?(user, :read_project, project)
|
Ability.abilities.allowed?(user, :read_project, project)
|
||||||
else
|
else
|
||||||
true
|
true
|
||||||
|
|
|
@ -31,7 +31,7 @@ module Gitlab
|
||||||
reference_type = node.attr('data-reference-filter')
|
reference_type = node.attr('data-reference-filter')
|
||||||
reference_filter = reference_type.constantize
|
reference_filter = reference_type.constantize
|
||||||
|
|
||||||
return unless reference_filter.user_can_reference?(current_user, node)
|
return unless reference_filter.user_can_reference?(current_user, node, context)
|
||||||
|
|
||||||
references = reference_filter.referenced_by(node)
|
references = reference_filter.referenced_by(node)
|
||||||
return unless references
|
return unless references
|
||||||
|
|
|
@ -42,7 +42,7 @@ module Gitlab
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.user_can_reference?(user, node)
|
def self.user_can_reference?(user, node, context)
|
||||||
if node.has_attribute?('data-group')
|
if node.has_attribute?('data-group')
|
||||||
group = Group.find(node.attr('data-group')) rescue nil
|
group = Group.find(node.attr('data-group')) rescue nil
|
||||||
Ability.abilities.allowed?(user, :read_group, group)
|
Ability.abilities.allowed?(user, :read_group, group)
|
||||||
|
|
|
@ -2,7 +2,7 @@ require 'spec_helper'
|
||||||
|
|
||||||
describe Gitlab::ReferenceExtractor do
|
describe Gitlab::ReferenceExtractor do
|
||||||
let(:project) { create(:project) }
|
let(:project) { create(:project) }
|
||||||
subject { Gitlab::ReferenceExtractor.new(project, project.owner) }
|
subject { Gitlab::ReferenceExtractor.new(project, project.creator) }
|
||||||
|
|
||||||
it 'accesses valid user objects' do
|
it 'accesses valid user objects' do
|
||||||
@u_foo = create(:user, username: 'foo')
|
@u_foo = create(:user, username: 'foo')
|
||||||
|
@ -102,7 +102,7 @@ describe Gitlab::ReferenceExtractor do
|
||||||
let(:issue) { create(:issue, project: other_project) }
|
let(:issue) { create(:issue, project: other_project) }
|
||||||
|
|
||||||
before do
|
before do
|
||||||
other_project.team << [project.owner, :developer]
|
other_project.team << [project.creator, :developer]
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'handles project issue references' do
|
it 'handles project issue references' do
|
||||||
|
|
|
@ -50,6 +50,8 @@ def common_mentionable_setup
|
||||||
}
|
}
|
||||||
extra_commits.each { |c| commitmap[c.short_id] = c }
|
extra_commits.each { |c| commitmap[c.short_id] = c }
|
||||||
|
|
||||||
|
allow(Project).to receive(:find).and_call_original
|
||||||
|
allow(Project).to receive(:find).with(project.id.to_s).and_return(project)
|
||||||
allow(project.repository).to receive(:commit) { |sha| commitmap[sha] }
|
allow(project.repository).to receive(:commit) { |sha| commitmap[sha] }
|
||||||
|
|
||||||
set_mentionable_text.call(ref_string)
|
set_mentionable_text.call(ref_string)
|
||||||
|
|
Loading…
Reference in New Issue