Patch #26122 » joins_enabled_modules.patch
| controllers/versions_controller.rb (working copy) | ||
|---|---|---|
| 47 | 47 |
@issues_by_version = {}
|
| 48 | 48 |
if @selected_tracker_ids.any? && @versions.any? |
| 49 | 49 |
issues = Issue.visible. |
| 50 |
includes(:project, :tracker).
|
|
| 50 |
eager_load(:project, :tracker).
|
|
| 51 | 51 |
preload(:status, :priority, :fixed_version). |
| 52 | 52 |
where(:tracker_id => @selected_tracker_ids, :project_id => project_ids, :fixed_version_id => @versions.map(&:id)). |
| 53 | 53 |
order("#{Project.table_name}.lft, #{Tracker.table_name}.position, #{Issue.table_name}.id")
|
| models/board.rb (working copy) | ||
|---|---|---|
| 31 | 31 |
attr_protected :id |
| 32 | 32 | |
| 33 | 33 |
scope :visible, lambda {|*args|
|
| 34 |
joins(:project). |
|
| 35 |
where(Project.allowed_to_condition(args.shift || User.current, :view_messages, *args)) |
|
| 34 |
user = args.shift || User.current |
|
| 35 |
options = args.shift || {}
|
|
| 36 |
options[:skip_pre_condition] = true |
|
| 37 |
permission = :view_messages |
|
| 38 |
Project.enabled_modules_scope(all, permission).where(Project.allowed_to_condition(user, permission, options)) |
|
| 36 | 39 |
} |
| 37 | 40 | |
| 38 | 41 |
safe_attributes 'name', 'description', 'parent_id', 'position' |
| models/changeset.rb (working copy) | ||
|---|---|---|
| 49 | 49 |
attr_protected :id |
| 50 | 50 | |
| 51 | 51 |
scope :visible, lambda {|*args|
|
| 52 |
joins(:repository => :project). |
|
| 53 |
where(Project.allowed_to_condition(args.shift || User.current, :view_changesets, *args)) |
|
| 52 |
user = args.shift || User.current |
|
| 53 |
options = args.shift || {}
|
|
| 54 |
options[:skip_pre_condition] = true |
|
| 55 |
scope = if project_module = Redmine::AccessControl.permission(:view_changesets).try(:project_module) |
|
| 56 |
joins(:repository => {:project => :enabled_modules}).where(:enabled_modules => {:name => project_module})
|
|
| 57 |
else |
|
| 58 |
joins(:repository => :project) |
|
| 59 |
end |
|
| 60 | ||
| 61 |
scope.where(Project.allowed_to_condition(user, :view_changesets, options)) |
|
| 54 | 62 |
} |
| 55 | 63 | |
| 56 | 64 |
after_create :scan_for_issues |
| models/document.rb (working copy) | ||
|---|---|---|
| 36 | 36 |
after_create :send_notification |
| 37 | 37 | |
| 38 | 38 |
scope :visible, lambda {|*args|
|
| 39 |
joins(:project). |
|
| 40 |
where(Project.allowed_to_condition(args.shift || User.current, :view_documents, *args)) |
|
| 39 |
user = args.shift || User.current |
|
| 40 |
options = args.shift || {}
|
|
| 41 |
options[:skip_pre_condition] = true |
|
| 42 |
permission = :view_documents |
|
| 43 |
Project.enabled_modules_scope(all, permission).where(Project.allowed_to_condition(user, permission, options)) |
|
| 41 | 44 |
} |
| 42 | 45 | |
| 43 | 46 |
safe_attributes 'category_id', 'title', 'description', 'custom_fields', 'custom_field_values' |
| models/issue.rb (working copy) | ||
|---|---|---|
| 72 | 72 |
attr_protected :id |
| 73 | 73 | |
| 74 | 74 |
scope :visible, lambda {|*args|
|
| 75 |
joins(:project). |
|
| 76 |
where(Issue.visible_condition(args.shift || User.current, *args)) |
|
| 75 |
user = args.shift || User.current |
|
| 76 |
options = args.shift || {}
|
|
| 77 |
options[:skip_pre_condition] = true |
|
| 78 |
Project.enabled_modules_scope(all, :view_issues).where(Issue.visible_condition(user, options)) |
|
| 77 | 79 |
} |
| 78 | 80 | |
| 79 | 81 |
scope :open, lambda {|*args|
|
| ... | ... | |
| 1527 | 1529 |
# Returns a scope of projects that user can assign issues to |
| 1528 | 1530 |
# If current_project is given, it will be included in the scope |
| 1529 | 1531 |
def self.allowed_target_projects(user=User.current, current_project=nil) |
| 1530 |
condition = Project.allowed_to_condition(user, :add_issues) |
|
| 1532 |
condition = Project.allowed_to_condition(user, :add_issues, :skip_pre_condition => true)
|
|
| 1531 | 1533 |
if current_project |
| 1532 | 1534 |
condition = ["(#{condition}) OR #{Project.table_name}.id = ?", current_project.id]
|
| 1533 | 1535 |
end |
| 1534 |
Project.where(condition).having_trackers |
|
| 1536 | ||
| 1537 |
scope = Project |
|
| 1538 |
if project_module = Redmine::AccessControl.permission(:add_issues).try(:project_module) |
|
| 1539 |
scope = scope.joins(:enabled_modules).where(:enabled_modules => {:name => project_module})
|
|
| 1540 |
end |
|
| 1541 | ||
| 1542 |
scope.where(condition).having_trackers |
|
| 1535 | 1543 |
end |
| 1536 | 1544 | |
| 1537 | 1545 |
# Returns a scope of trackers that user can assign the issue to |
| models/journal.rb (working copy) | ||
|---|---|---|
| 49 | 49 |
user = args.shift || User.current |
| 50 | 50 |
options = args.shift || {}
|
| 51 | 51 | |
| 52 |
joins(:issue => :project). |
|
| 52 |
options[:skip_pre_condition] = true |
|
| 53 |
scope = if project_module = Redmine::AccessControl.permission(:view_issues).try(:project_module) |
|
| 54 |
joins(:issue => {:project => :enabled_modules}).where(:enabled_modules => {:name => project_module})
|
|
| 55 |
else |
|
| 56 |
joins(:issue => :project) |
|
| 57 |
end |
|
| 58 | ||
| 59 |
scope. |
|
| 53 | 60 |
where(Issue.visible_condition(user, options)). |
| 54 | 61 |
where(Journal.visible_notes_condition(user, :skip_pre_condition => true)) |
| 55 | 62 |
} |
| models/message.rb (working copy) | ||
|---|---|---|
| 49 | 49 |
after_create :send_notification |
| 50 | 50 | |
| 51 | 51 |
scope :visible, lambda {|*args|
|
| 52 |
joins(:board => :project). |
|
| 53 |
where(Project.allowed_to_condition(args.shift || User.current, :view_messages, *args)) |
|
| 52 |
user = args.shift || User.current |
|
| 53 |
options = args.shift || {}
|
|
| 54 |
options[:skip_pre_condition] = true |
|
| 55 |
scope = if project_module = Redmine::AccessControl.permission(:view_messages).try(:project_module) |
|
| 56 |
joins(:board => {:project => :enabled_modules}).where(:enabled_modules => {:name => project_module})
|
|
| 57 |
else |
|
| 58 |
joins(:board => :project) |
|
| 59 |
end |
|
| 60 | ||
| 61 |
scope.where(Project.allowed_to_condition(user, :view_messages, options)) |
|
| 54 | 62 |
} |
| 55 | 63 | |
| 56 | 64 |
safe_attributes 'subject', 'content' |
| models/news.rb (working copy) | ||
|---|---|---|
| 39 | 39 |
after_create :send_notification |
| 40 | 40 | |
| 41 | 41 |
scope :visible, lambda {|*args|
|
| 42 |
joins(:project). |
|
| 43 |
where(Project.allowed_to_condition(args.shift || User.current, :view_news, *args)) |
|
| 42 |
user = args.shift || User.current |
|
| 43 |
options = args.shift || {}
|
|
| 44 |
options[:skip_pre_condition] = true |
|
| 45 |
permission = :view_news |
|
| 46 |
Project.enabled_modules_scope(all, permission).where(Project.allowed_to_condition(user, permission, options)) |
|
| 44 | 47 |
} |
| 45 | 48 | |
| 46 | 49 |
safe_attributes 'title', 'summary', 'description' |
| models/project.rb (working copy) | ||
|---|---|---|
| 91 | 91 |
scope :active, lambda { where(:status => STATUS_ACTIVE) }
|
| 92 | 92 |
scope :status, lambda {|arg| where(arg.blank? ? nil : {:status => arg.to_i}) }
|
| 93 | 93 |
scope :all_public, lambda { where(:is_public => true) }
|
| 94 |
scope :visible, lambda {|*args| where(Project.visible_condition(args.shift || User.current, *args)) }
|
|
| 94 |
scope :visible, lambda { |*args|
|
|
| 95 |
user = args.shift || User.current |
|
| 96 |
options = args.shift || {}
|
|
| 97 |
options[:skip_pre_condition] = true |
|
| 98 |
scope = all |
|
| 99 |
if project_module = Redmine::AccessControl.permission(:view_project).try(:project_module) |
|
| 100 |
scope = scope.joins(:enabled_modules).where(:enabled_modules => {:name => project_module})
|
|
| 101 |
end |
|
| 102 | ||
| 103 |
scope.where(Project.visible_condition(user, options)) |
|
| 104 |
} |
|
| 95 | 105 |
scope :allowed_to, lambda {|*args|
|
| 96 | 106 |
user = User.current |
| 97 | 107 |
permission = nil |
| ... | ... | |
| 169 | 179 |
allowed_to_condition(user, :view_project, options) |
| 170 | 180 |
end |
| 171 | 181 | |
| 182 |
def self.enabled_modules_scope(scope, permission) |
|
| 183 |
if project_module = Redmine::AccessControl.permission(permission).try(:project_module) |
|
| 184 |
scope.joins(:project => :enabled_modules).where(:enabled_modules => {:name => project_module})
|
|
| 185 |
else |
|
| 186 |
scope.joins(:project) |
|
| 187 |
end |
|
| 188 |
end |
|
| 189 | ||
| 172 | 190 |
# Returns a SQL conditions string used to find all projects for which +user+ has the given +permission+ |
| 173 | 191 |
# |
| 174 | 192 |
# Valid options: |
| models/time_entry.rb (working copy) | ||
|---|---|---|
| 51 | 51 |
validate :validate_time_entry |
| 52 | 52 | |
| 53 | 53 |
scope :visible, lambda {|*args|
|
| 54 |
joins(:project). |
|
| 55 |
where(TimeEntry.visible_condition(args.shift || User.current, *args)) |
|
| 54 |
user = args.shift || User.current |
|
| 55 |
options = args.shift || {}
|
|
| 56 |
options[:skip_pre_condition] = true |
|
| 57 |
permission = :view_time_entries |
|
| 58 |
Project.enabled_modules_scope(all, permission).where(TimeEntry.visible_condition(user, options)) |
|
| 56 | 59 |
} |
| 57 | 60 |
scope :left_join_issue, lambda {
|
| 58 | 61 |
joins("LEFT OUTER JOIN #{Issue.table_name} ON #{Issue.table_name}.id = #{TimeEntry.table_name}.issue_id")
|
| models/tracker.rb (working copy) | ||
|---|---|---|
| 57 | 57 |
# => returns the trackers that are visible by the user in at least on project |
| 58 | 58 |
scope :visible, lambda {|*args|
|
| 59 | 59 |
user = args.shift || User.current |
| 60 |
condition = Project.allowed_to_condition(user, :view_issues) do |role, user| |
|
| 61 |
unless role.permissions_all_trackers?(:view_issues) |
|
| 62 |
tracker_ids = role.permissions_tracker_ids(:view_issues) |
|
| 60 |
options = args.shift || {}
|
|
| 61 |
options[:skip_pre_condition] = true |
|
| 62 |
permission = :view_issues |
|
| 63 | ||
| 64 |
condition = Project.allowed_to_condition(user, permission, options) do |role, user| |
|
| 65 |
unless role.permissions_all_trackers?(permission) |
|
| 66 |
tracker_ids = role.permissions_tracker_ids(permission) |
|
| 63 | 67 |
if tracker_ids.any? |
| 64 | 68 |
"#{Tracker.table_name}.id IN (#{tracker_ids.join(',')})"
|
| 65 | 69 |
else |
| ... | ... | |
| 67 | 71 |
end |
| 68 | 72 |
end |
| 69 | 73 |
end |
| 70 |
joins(:projects).where(condition).distinct |
|
| 74 | ||
| 75 |
scope = if project_module = Redmine::AccessControl.permission(permission).try(:project_module) |
|
| 76 |
joins(:projects => :enabled_modules).where(:enabled_modules => {:name => project_module})
|
|
| 77 |
else |
|
| 78 |
joins(:projects) |
|
| 79 |
end |
|
| 80 | ||
| 81 |
scope.where(condition).distinct |
|
| 71 | 82 |
} |
| 72 | 83 | |
| 73 | 84 |
safe_attributes 'name', |
| models/version.rb (working copy) | ||
|---|---|---|
| 55 | 55 |
end |
| 56 | 56 |
} |
| 57 | 57 |
scope :visible, lambda {|*args|
|
| 58 |
joins(:project). |
|
| 59 |
where(Project.allowed_to_condition(args.first || User.current, :view_issues)) |
|
| 58 |
user = args.shift || User.current |
|
| 59 |
options = args.shift || {}
|
|
| 60 |
options[:skip_pre_condition] = true |
|
| 61 |
permission = :view_issues |
|
| 62 |
Project.enabled_modules_scope(all, permission).where(Project.allowed_to_condition(user, permission, options)) |
|
| 60 | 63 |
} |
| 61 | 64 | |
| 62 | 65 |
safe_attributes 'name', |
- « Previous
- 1
- 2
- 3
- Next »