|
33 | 33 | module Accounts::Authorization |
34 | 34 | extend ActiveSupport::Concern |
35 | 35 |
|
36 | | - METHODS_ENFORCING_AUTHORIZATION = %i[require_admin authorize authorize_global load_and_authorize_in_optional_project].freeze |
| 36 | + METHODS_ENFORCING_AUTHORIZATION = %i[ |
| 37 | + require_admin |
| 38 | + authorize |
| 39 | + authorize_global |
| 40 | + authorize_with_global_permission |
| 41 | + load_and_authorize_in_optional_project |
| 42 | + load_and_authorize_with_permission_in_project |
| 43 | + ].freeze |
37 | 44 |
|
38 | 45 | included do |
39 | 46 | class_attribute :authorization_ensured, |
@@ -86,13 +93,14 @@ def load_and_authorize_in_optional_project |
86 | 93 | # * a parameter-like Hash (eg. { controller: '/projects', action: 'edit' }) |
87 | 94 | # * a permission Symbol (eg. :edit_project) |
88 | 95 | def do_authorize(action, global: false) # rubocop:disable Metrics/PerceivedComplexity |
89 | | - is_authorized = if global |
90 | | - User.current.allowed_based_on_permission_context?(action) |
91 | | - else |
92 | | - User.current.allowed_based_on_permission_context?(action, |
93 | | - project: @project || @projects, |
94 | | - entity: @work_package || @work_packages) |
95 | | - end |
| 96 | + is_authorized = |
| 97 | + if global |
| 98 | + User.current.allowed_based_on_permission_context?(action) |
| 99 | + else |
| 100 | + User.current.allowed_based_on_permission_context?(action, |
| 101 | + project: @project || @projects, |
| 102 | + entity: @work_package || @work_packages) |
| 103 | + end |
96 | 104 |
|
97 | 105 | unless is_authorized |
98 | 106 | if @project&.archived? |
@@ -206,14 +214,16 @@ def authorize_with_permission(permission, global: false, **args) |
206 | 214 | end |
207 | 215 | end |
208 | 216 |
|
209 | | - # Find a project based on params[:project_id] |
210 | | - # and authorize on a given permission |
211 | | - def load_and_authorize_with_permission_in_optional_project(permission, **args) |
| 217 | + def authorize_with_global_permission(permission, **args) |
| 218 | + authorize_with_permission(permission, global: true, **args) |
| 219 | + end |
| 220 | + |
| 221 | + def load_and_authorize_with_permission_in_project(permission, **args) |
212 | 222 | authorization_checked_by_default_action(**args.slice(:only, :except)) |
213 | 223 |
|
214 | 224 | before_action(**args) do |
215 | | - @project = Project.find(params[:project_id]) if params[:project_id].present? |
216 | | - do_authorize(permission, global: params[:project_id].blank?) |
| 225 | + @project = Project.find(params[:project_id]) |
| 226 | + do_authorize(permission, global: false) |
217 | 227 | end |
218 | 228 | end |
219 | 229 | end |
|
0 commit comments