Commit f2872489 authored by jplang's avatar jplang

Fixed that restricted custom permissions on for non member/anonymous does not work (#23655).

git-svn-id: https://svn.redmine.org/redmine/trunk@15750 e93f8b46-1217-0410-a6f0-8f06a7374b81
parent 23632838
......@@ -197,7 +197,9 @@ class Project < ActiveRecord::Base
if role.allowed_to?(permission)
s = "#{Project.table_name}.is_public = #{connection.quoted_true}"
if user.id
s = "(#{s} AND #{Project.table_name}.id NOT IN (SELECT project_id FROM #{Member.table_name} WHERE user_id = #{user.id}))"
group = role.anonymous? ? Group.anonymous : Group.non_member
principal_ids = [user.id, group.id].compact
s = "(#{s} AND #{Project.table_name}.id NOT IN (SELECT project_id FROM #{Member.table_name} WHERE user_id IN (#{principal_ids.join(',')})))"
end
statement_by_role[role] = s
end
......
......@@ -319,6 +319,28 @@ class IssueTest < ActiveSupport::TestCase
assert_equal false, Issue.where(:project_id => 1).first.visible?(user)
end
def test_visible_scope_with_custom_non_member_role_having_restricted_permission
role = Role.generate!(:permissions => [:view_project])
assert Role.non_member.has_permission?(:view_issues)
user = User.generate!
Member.create!(:principal => Group.non_member, :project_id => 1, :roles => [role])
issues = Issue.visible(user).to_a
assert issues.any?
assert_nil issues.detect {|issue| issue.project_id == 1}
end
def test_visible_scope_with_custom_non_member_role_having_extended_permission
role = Role.generate!(:permissions => [:view_project, :view_issues])
Role.non_member.remove_permission!(:view_issues)
user = User.generate!
Member.create!(:principal => Group.non_member, :project_id => 1, :roles => [role])
issues = Issue.visible(user).to_a
assert issues.any?
assert_not_nil issues.detect {|issue| issue.project_id == 1}
end
def test_visible_scope_for_member_with_groups_should_return_assigned_issues
user = User.find(8)
assert user.groups.any?
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment