Module: Decidim::ActionAuthorization

Extended by:
ActiveSupport::Concern
Included in:
Features::BaseController
Defined in:
app/controllers/concerns/decidim/action_authorization.rb

Defined Under Namespace

Classes: Unauthorized

Instance Method Summary collapse

Instance Method Details

#_action_authorizer(action_name) ⇒ Object



51
52
53
# File 'app/controllers/concerns/decidim/action_authorization.rb', line 51

def _action_authorizer(action_name)
  ::Decidim::ActionAuthorizer.new(current_user, current_feature, action_name)
end

#action_authorization(action_name) ⇒ Object

Public: Returns the authorization object for an authorization.

action_name - The action to authorize against.

Returns an ActionAuthorizer::AuthorizationStatus



32
33
34
35
36
# File 'app/controllers/concerns/decidim/action_authorization.rb', line 32

def action_authorization(action_name)
  @action_authorizations ||= {}

  @action_authorizations[action_name] = _action_authorizer(action_name).authorize
end

#authorize_action!(action_name, redirect_url: nil) ⇒ Object

Public: Authorizes an action of a feature given an action name.

action_name - The action name to authorize. Actions are set up on the

feature's permissions panel.

redirect_url - Url to be redirected to when the authorization is finished.

Raises:



18
19
20
21
22
23
24
25
# File 'app/controllers/concerns/decidim/action_authorization.rb', line 18

def authorize_action!(action_name, redirect_url: nil)
  status = action_authorization(action_name)

  return if status.ok?
  raise Unauthorized if status.code == :invalid

  redirect_to authorize_action_path(action_name, redirect_url: redirect_url)
end

#authorize_action_path(action_name, redirect_url: nil) ⇒ Object

Public: Returns the authorization path for a failed authorization with the populated redirect url.

action_name - The action name to authorize against. redirect_url - The url to redirect to when finished.

Returns a String.



45
46
47
48
49
# File 'app/controllers/concerns/decidim/action_authorization.rb', line 45

def authorize_action_path(action_name, redirect_url: nil)
  redirect_url ||= request.path

  action_authorization(action_name).current_path(redirect_url: redirect_url)
end