@@ -197,7 +197,9 class Project < ActiveRecord::Base | |||||
197 | if role.allowed_to?(permission) |
|
197 | if role.allowed_to?(permission) | |
198 | s = "#{Project.table_name}.is_public = #{connection.quoted_true}" |
|
198 | s = "#{Project.table_name}.is_public = #{connection.quoted_true}" | |
199 | if user.id |
|
199 | if user.id | |
200 | s = "(#{s} AND #{Project.table_name}.id NOT IN (SELECT project_id FROM #{Member.table_name} WHERE user_id = #{user.id}))" |
|
200 | group = role.anonymous? ? Group.anonymous : Group.non_member | |
|
201 | principal_ids = [user.id, group.id].compact | |||
|
202 | s = "(#{s} AND #{Project.table_name}.id NOT IN (SELECT project_id FROM #{Member.table_name} WHERE user_id IN (#{principal_ids.join(',')})))" | |||
201 | end |
|
203 | end | |
202 | statement_by_role[role] = s |
|
204 | statement_by_role[role] = s | |
203 | end |
|
205 | end |
@@ -319,6 +319,28 class IssueTest < ActiveSupport::TestCase | |||||
319 | assert_equal false, Issue.where(:project_id => 1).first.visible?(user) |
|
319 | assert_equal false, Issue.where(:project_id => 1).first.visible?(user) | |
320 | end |
|
320 | end | |
321 |
|
321 | |||
|
322 | def test_visible_scope_with_custom_non_member_role_having_restricted_permission | |||
|
323 | role = Role.generate!(:permissions => [:view_project]) | |||
|
324 | assert Role.non_member.has_permission?(:view_issues) | |||
|
325 | user = User.generate! | |||
|
326 | Member.create!(:principal => Group.non_member, :project_id => 1, :roles => [role]) | |||
|
327 | ||||
|
328 | issues = Issue.visible(user).to_a | |||
|
329 | assert issues.any? | |||
|
330 | assert_nil issues.detect {|issue| issue.project_id == 1} | |||
|
331 | end | |||
|
332 | ||||
|
333 | def test_visible_scope_with_custom_non_member_role_having_extended_permission | |||
|
334 | role = Role.generate!(:permissions => [:view_project, :view_issues]) | |||
|
335 | Role.non_member.remove_permission!(:view_issues) | |||
|
336 | user = User.generate! | |||
|
337 | Member.create!(:principal => Group.non_member, :project_id => 1, :roles => [role]) | |||
|
338 | ||||
|
339 | issues = Issue.visible(user).to_a | |||
|
340 | assert issues.any? | |||
|
341 | assert_not_nil issues.detect {|issue| issue.project_id == 1} | |||
|
342 | end | |||
|
343 | ||||
322 | def test_visible_scope_for_member_with_groups_should_return_assigned_issues |
|
344 | def test_visible_scope_for_member_with_groups_should_return_assigned_issues | |
323 | user = User.find(8) |
|
345 | user = User.find(8) | |
324 | assert user.groups.any? |
|
346 | assert user.groups.any? |
General Comments 0
You need to be logged in to leave comments.
Login now