Class: Decidim::ActionAuthorizer::AuthorizationStatusCollection
- Inherits:
-
Object
- Object
- Decidim::ActionAuthorizer::AuthorizationStatusCollection
- Defined in:
- decidim-core/app/services/decidim/action_authorizer.rb
Instance Attribute Summary collapse
-
#statuses ⇒ Object
readonly
Returns the value of attribute statuses.
Instance Method Summary collapse
- #codes ⇒ Object
- #ephemeral? ⇒ Boolean
- #global_code ⇒ Object
-
#initialize(authorization_handlers, user, component, resource) ⇒ AuthorizationStatusCollection
constructor
A new instance of AuthorizationStatusCollection.
- #ok? ⇒ Boolean
- #pending_authorizations_count ⇒ Object
- #single_authorization_required? ⇒ Boolean
- #status_for(handler_name) ⇒ Object
- #user_pending? ⇒ Boolean
Constructor Details
#initialize(authorization_handlers, user, component, resource) ⇒ AuthorizationStatusCollection
Returns a new instance of AuthorizationStatusCollection.
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 100 def initialize(, user, component, resource) @ephemeral_user = user&.ephemeral? @authorization_handlers = @statuses = &.filter_map do |name, opts| handler = Verifications::Adapter.from_element(name) next if @ephemeral_user && !handler.ephemeral? = user ? Verifications::Authorizations.new(organization: user.organization, user:, name:).first : nil status_code, data = handler.(, opts["options"], component, resource) AuthorizationStatus.new(status_code, handler, data) end || [] end |
Instance Attribute Details
#statuses ⇒ Object (readonly)
Returns the value of attribute statuses.
98 99 100 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 98 def statuses @statuses end |
Instance Method Details
#codes ⇒ Object
135 136 137 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 135 def codes @codes ||= statuses.map(&:code) end |
#ephemeral? ⇒ Boolean
149 150 151 152 153 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 149 def ephemeral? return if statuses.blank? statuses.all?(&:ephemeral?) end |
#global_code ⇒ Object
121 122 123 124 125 126 127 128 129 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 121 def global_code return :ok if ok? [:unauthorized, :pending].each do |code| return code if statuses.any? { |status| status.code == code } end false end |
#ok? ⇒ Boolean
113 114 115 116 117 118 119 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 113 def ok? # When no statuses are present for the action ephemeral users # are not allowed to perform the action return !@ephemeral_user if statuses.blank? statuses.all?(&:ok?) end |
#pending_authorizations_count ⇒ Object
139 140 141 142 143 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 139 def return 0 if @statuses.blank? @statuses.count end |
#single_authorization_required? ⇒ Boolean
145 146 147 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 145 def == 1 && [:ok, :unauthorized].exclude?(global_code) end |
#status_for(handler_name) ⇒ Object
131 132 133 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 131 def status_for(handler_name) statuses.find { |status| status.handler_name == handler_name } end |
#user_pending? ⇒ Boolean
155 156 157 |
# File 'decidim-core/app/services/decidim/action_authorizer.rb', line 155 def user_pending? !global_code && statuses.any? { |status| [:missing, :expired, :incomplete].include?(status.code) } end |