Defect #34029 » patch.diff
app/models/principal.rb | ||
---|---|---|
143 | 143 |
project.is_a?(Project) && project_ids.include?(project.id) |
144 | 144 |
end |
145 | 145 | |
146 |
def roles |
|
147 |
@roles ||= Role.joins(members: :project).where(["#{Project.table_name}.status <> ?", Project::STATUS_ARCHIVED]).where(Member.arel_table[:user_id].eq(id)).distinct |
|
148 |
end |
|
149 | ||
146 | 150 |
# Returns an array of the project ids that the principal is a member of |
147 | 151 |
def project_ids |
148 | 152 |
@project_ids ||= super.freeze |
app/models/user.rb | ||
---|---|---|
588 | 588 |
@membership_by_project_id[project_id] |
589 | 589 |
end |
590 | 590 | |
591 |
def roles |
|
592 |
@roles ||= Role.joins(members: :project).where(["#{Project.table_name}.status <> ?", Project::STATUS_ARCHIVED]).where(Member.arel_table[:user_id].eq(id)).distinct |
|
593 |
end |
|
594 | ||
595 | 591 |
# Returns the user's bult-in role |
596 | 592 |
def builtin_role |
597 | 593 |
@builtin_role ||= Role.non_member |
... | ... | |
723 | 719 |
return true if admin? |
724 | 720 | |
725 | 721 |
# authorize if user has at least one role that has this permission |
726 |
roles = self.roles.to_a | [builtin_role] |
|
722 |
roles = self.roles.to_a | [builtin_role] | Group.non_member.roles.to_a | Group.anonymous.roles.to_a
|
|
727 | 723 |
roles.any? {|role| |
728 | 724 |
role.allowed_to?(action) && |
729 | 725 |
(block_given? ? yield(role, self) : true) |
test/system/issues_test.rb | ||
---|---|---|
152 | 152 |
assert_equal 'Some description', issue.attachments.first.description |
153 | 153 |
end |
154 | 154 | |
155 |
def test_create_issue_with_attachment_when_user_is_not_a_member |
|
156 |
set_tmp_attachments_directory |
|
157 | ||
158 |
# Set no permission to non-member role |
|
159 |
non_member_role = Role.where(:builtin => Role::BUILTIN_NON_MEMBER).first |
|
160 |
non_member_role.permissions = [] |
|
161 |
non_member_role.save |
|
162 | ||
163 |
# Set role "Reporter" to non-member users on project ecookbook |
|
164 |
membership = Member.find_or_create_by(user_id: Group.non_member.id, project_id: 1) |
|
165 |
membership.roles = [Role.find(3)] # Reporter |
|
166 |
membership.save |
|
167 | ||
168 |
log_user('someone', 'foo') |
|
169 | ||
170 |
issue = new_record(Issue) do |
|
171 |
visit '/projects/ecookbook/issues/new' |
|
172 |
fill_in 'Subject', :with => 'Issue with attachment' |
|
173 |
attach_file 'attachments[dummy][file]', Rails.root.join('test/fixtures/files/testfile.txt') |
|
174 |
fill_in 'attachments[1][description]', :with => 'Some description' |
|
175 |
click_on 'Create' |
|
176 |
end |
|
177 |
assert_equal 1, issue.attachments.count |
|
178 |
assert_equal 'Some description', issue.attachments.first.description |
|
179 |
end |
|
180 | ||
155 | 181 |
def test_create_issue_with_new_target_version |
156 | 182 |
log_user('jsmith', 'jsmith') |
157 | 183 |