Defect #28180 ยป 0001-Ignore-archived-project-memberships-when-calculating.patch
| app/models/query.rb | ||
|---|---|---|
| 319 | 319 |
" INNER JOIN #{table_name_prefix}queries_roles#{table_name_suffix} qr on qr.query_id = q.id" +
|
| 320 | 320 |
" INNER JOIN #{MemberRole.table_name} mr ON mr.role_id = qr.role_id" +
|
| 321 | 321 |
" INNER JOIN #{Member.table_name} m ON m.id = mr.member_id AND m.user_id = ?" +
|
| 322 |
" INNER JOIN #{Project.table_name} p ON p.id = m.project_id AND p.status <> ?" +
|
|
| 322 | 323 |
" WHERE q.project_id IS NULL OR q.project_id = m.project_id))" + |
| 323 | 324 |
" OR #{table_name}.user_id = ?",
|
| 324 |
VISIBILITY_PUBLIC, VISIBILITY_ROLES, user.id, user.id) |
|
| 325 |
VISIBILITY_PUBLIC, VISIBILITY_ROLES, user.id, Project::STATUS_ARCHIVED, user.id)
|
|
| 325 | 326 |
elsif user.logged? |
| 326 | 327 |
scope.where("#{table_name}.visibility = ? OR #{table_name}.user_id = ?", VISIBILITY_PUBLIC, user.id)
|
| 327 | 328 |
else |
| ... | ... | |
| 340 | 341 |
if project |
| 341 | 342 |
(user.roles_for_project(project) & roles).any? |
| 342 | 343 |
else |
| 343 |
Member.where(:user_id => user.id).joins(:roles).where(:member_roles => {:role_id => roles.map(&:id)}).any?
|
|
| 344 |
user.memberships.joins(:member_roles).where(:member_roles => {:role_id => roles.map(&:id)}).any?
|
|
| 344 | 345 |
end |
| 345 | 346 |
else |
| 346 | 347 |
user == self.user |
| test/unit/query_test.rb | ||
|---|---|---|
| 1790 | 1790 | |
| 1791 | 1791 |
assert q.visible?(User.find(1)) |
| 1792 | 1792 |
assert IssueQuery.visible(User.find(1)).find_by_id(q.id) |
| 1793 | ||
| 1794 |
# Should ignore archived project memberships |
|
| 1795 |
Project.find(1).archive |
|
| 1796 |
assert !q.visible?(User.find(3)) |
|
| 1797 |
assert_nil IssueQuery.visible(User.find(3)).find_by_id(q.id) |
|
| 1793 | 1798 |
end |
| 1794 | 1799 | |
| 1795 | 1800 |
def test_query_with_private_visibility_should_be_visible_to_owner |