Class: Decidim::PermissionAction
- Inherits:
-
Object
- Object
- Decidim::PermissionAction
- Defined in:
- app/models/decidim/permission_action.rb
Overview
This class encapsulates an action, which will be used by the permissions system to check if the user is allowed to perform it.
It consists of a ‘scope` (which will typically be either `:public` or `:admin`), the name of the `:action` that is being performed and the `:subject` of the action.
Defined Under Namespace
Classes: PermissionCannotBeDisallowedError, PermissionNotSetError
Instance Attribute Summary collapse
-
#action ⇒ Object
readonly
Returns the value of attribute action.
-
#backtrace ⇒ Object
readonly
Returns the value of attribute backtrace.
-
#scope ⇒ Object
readonly
Returns the value of attribute scope.
-
#subject ⇒ Object
readonly
Returns the value of attribute subject.
Instance Method Summary collapse
- #allow! ⇒ Object
- #allowed? ⇒ Boolean
- #disallow! ⇒ Object
-
#initialize(action:, scope:, subject:) ⇒ PermissionAction
constructor
action - a Symbol representing the action being performed scope - a Symbol representing the scope of the action subject - a Symbol representing the subject of the action.
-
#matches?(scope, action, subject) ⇒ Boolean
Checks if this PermissionAction specifies the same
scope
,action
andsubject
thant the ones provided as arguments. - #to_s ⇒ Object
- #trace(class_name, state) ⇒ Object
Constructor Details
#initialize(action:, scope:, subject:) ⇒ PermissionAction
action - a Symbol representing the action being performed scope - a Symbol representing the scope of the action subject - a Symbol representing the subject of the action
14 15 16 17 18 19 20 |
# File 'app/models/decidim/permission_action.rb', line 14 def initialize(action:, scope:, subject:) @action = action @scope = scope @subject = subject @state = nil @backtrace = [] end |
Instance Attribute Details
#action ⇒ Object (readonly)
Returns the value of attribute action.
22 23 24 |
# File 'app/models/decidim/permission_action.rb', line 22 def action @action end |
#backtrace ⇒ Object (readonly)
Returns the value of attribute backtrace.
22 23 24 |
# File 'app/models/decidim/permission_action.rb', line 22 def backtrace @backtrace end |
#scope ⇒ Object (readonly)
Returns the value of attribute scope.
22 23 24 |
# File 'app/models/decidim/permission_action.rb', line 22 def scope @scope end |
#subject ⇒ Object (readonly)
Returns the value of attribute subject.
22 23 24 |
# File 'app/models/decidim/permission_action.rb', line 22 def subject @subject end |
Instance Method Details
#allow! ⇒ Object
24 25 26 27 28 |
# File 'app/models/decidim/permission_action.rb', line 24 def allow! raise PermissionCannotBeDisallowedError, "Allowing a previously disallowed action is not permitted: #{inspect}" if @state == :disallowed @state = :allowed end |
#allowed? ⇒ Boolean
34 35 36 37 38 |
# File 'app/models/decidim/permission_action.rb', line 34 def allowed? raise PermissionNotSetError, "Permission has not been allowed or disallowed yet: #{inspect}" if @state.blank? @state == :allowed end |
#disallow! ⇒ Object
30 31 32 |
# File 'app/models/decidim/permission_action.rb', line 30 def disallow! @state = :disallowed end |
#matches?(scope, action, subject) ⇒ Boolean
Checks if this PermissionAction specifies the same scope
, action
and subject
thant the ones provided as arguments.
46 47 48 49 50 51 |
# File 'app/models/decidim/permission_action.rb', line 46 def matches?(scope, action, subject) same = (self.action == action) same &&= (self.scope == scope) same &&= (self.subject == subject) same end |
#to_s ⇒ Object
53 54 55 |
# File 'app/models/decidim/permission_action.rb', line 53 def to_s "!#{self.class.name}<action: #{action}, scope: #{scope}, subject: #{subject}, state: #{@state}>" end |
#trace(class_name, state) ⇒ Object
40 41 42 |
# File 'app/models/decidim/permission_action.rb', line 40 def trace(class_name, state) @backtrace << [class_name, state] end |