Commit 55f802bd3a7840f20eab1f8be550a7fac97b961e
Exists in
api_tasks
and in
3 other branches
Merge branch 'api' of gitlab.com:noosfero/noosfero into api
Showing
2 changed files
with
22 additions
and
2 deletions
Show diff stats
app/models/person.rb
... | ... | @@ -40,9 +40,14 @@ roles] } |
40 | 40 | } |
41 | 41 | |
42 | 42 | scope :visible_for_person, lambda { |person| |
43 | - joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') | |
43 | + joins('LEFT JOIN "role_assignments" ON | |
44 | + "role_assignments"."resource_id" = "profiles"."environment_id" AND | |
45 | + "role_assignments"."resource_type" = \'Environment\'') | |
46 | + .joins('LEFT JOIN "roles" ON "role_assignments"."role_id" = "roles"."id"') | |
47 | + .joins('LEFT JOIN "friendships" ON "friendships"."friend_id" = "profiles"."id"') | |
44 | 48 | .where( |
45 | - ['( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?)', person.id, true, true] | |
49 | + ['( roles.key = ? AND role_assignments.accessor_type = ? AND role_assignments.accessor_id = ? ) OR ( | |
50 | + ( ( friendships.person_id = ? ) OR (profiles.public_profile = ?)) AND (profiles.visible = ?) )', 'environment_administrator', Profile.name, person.id, person.id, true, true] | |
46 | 51 | ).uniq |
47 | 52 | } |
48 | 53 | ... | ... |
test/unit/person_test.rb
... | ... | @@ -1663,6 +1663,9 @@ class PersonTest < ActiveSupport::TestCase |
1663 | 1663 | |
1664 | 1664 | should 'fetch people there are visible for a user' do |
1665 | 1665 | person = create_user('some-person').person |
1666 | + admin = create_user('some-admin').person | |
1667 | + Environment.default.add_admin(admin) | |
1668 | + | |
1666 | 1669 | p1 = fast_create(Person, :public_profile => true , :visible => true ) |
1667 | 1670 | p1.add_friend(person) |
1668 | 1671 | p2 = fast_create(Person, :public_profile => true , :visible => true ) |
... | ... | @@ -1674,13 +1677,25 @@ class PersonTest < ActiveSupport::TestCase |
1674 | 1677 | p6 = fast_create(Person, :public_profile => false, :visible => false) |
1675 | 1678 | |
1676 | 1679 | people = Person.visible_for_person(person) |
1680 | + people_for_admin = Person.visible_for_person(admin) | |
1677 | 1681 | |
1678 | 1682 | assert_includes people, p1 |
1683 | + assert_includes people_for_admin, p1 | |
1684 | + | |
1679 | 1685 | assert_includes people, p2 |
1686 | + assert_includes people_for_admin, p2 | |
1687 | + | |
1680 | 1688 | assert_not_includes people, p3 |
1689 | + assert_includes people_for_admin, p3 | |
1690 | + | |
1681 | 1691 | assert_includes people, p4 |
1692 | + assert_includes people_for_admin, p4 | |
1693 | + | |
1682 | 1694 | assert_not_includes people, p5 |
1695 | + assert_includes people_for_admin, p5 | |
1696 | + | |
1683 | 1697 | assert_not_includes people, p6 |
1698 | + assert_includes people_for_admin, p6 | |
1684 | 1699 | end |
1685 | 1700 | |
1686 | 1701 | should 'vote in a comment with value greater than 1' do | ... | ... |