Commit 55f802bd3a7840f20eab1f8be550a7fac97b961e

Authored by Rodrigo Souto
2 parents 6f1d2aef 52ba8997

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
... ...