Class: PapersPlease::Role
- Inherits:
-
Object
- Object
- PapersPlease::Role
- Defined in:
- lib/papers_please/role.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#permissions ⇒ Object
readonly
Returns the value of attribute permissions.
-
#predicate ⇒ Object
readonly
Returns the value of attribute predicate.
Instance Method Summary collapse
- #add_permission(actions, klass, query: nil, predicate: nil, granted_by: nil) ⇒ Object (also: #grant)
- #applies_to?(user) ⇒ Boolean
- #find_permission(action, subject) ⇒ Object
-
#initialize(name, predicate: nil, definition: nil) ⇒ Role
constructor
A new instance of Role.
- #permission_exists?(action, subject) ⇒ Boolean
Constructor Details
#initialize(name, predicate: nil, definition: nil) ⇒ Role
Returns a new instance of Role.
5 6 7 8 9 |
# File 'lib/papers_please/role.rb', line 5 def initialize(name, predicate: nil, definition: nil) @name = name @predicate = predicate = [] end |
Instance Attribute Details
#name ⇒ Object (readonly)
Returns the value of attribute name.
3 4 5 |
# File 'lib/papers_please/role.rb', line 3 def name @name end |
#permissions ⇒ Object (readonly)
Returns the value of attribute permissions.
3 4 5 |
# File 'lib/papers_please/role.rb', line 3 def end |
#predicate ⇒ Object (readonly)
Returns the value of attribute predicate.
3 4 5 |
# File 'lib/papers_please/role.rb', line 3 def predicate @predicate end |
Instance Method Details
#add_permission(actions, klass, query: nil, predicate: nil, granted_by: nil) ⇒ Object Also known as: grant
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/papers_please/role.rb', line 17 def (actions, klass, query: nil, predicate: nil, granted_by: nil) prepare_actions(actions).each do |action| raise DuplicatePermission if (action, klass) raise InvalidGrant, 'granted_by must be an array of [Class, Proc]' if !granted_by.nil? && !valid_grant?(granted_by) has_query = query.is_a?(Proc) has_predicate = predicate.is_a?(Proc) = Permission.new(action, klass) if granted_by .granting_class = granted_by[0] .granted_by = granted_by[1] end if has_query && has_predicate # Both query & predicate provided .query = query .predicate = predicate elsif has_query && !has_predicate # Only query provided .query = query if action == :create && actions == :manage # If the action is :create, expanded from :manage # then we set the default all predicate .predicate = (proc { true }) else # Otherwise the default predicate is to check # for inclusion in the returned relationship .predicate = (proc { |user, obj| res = query.call(user, klass, action) res.respond_to?(:include?) && res.include?(obj) }) end elsif !has_query && has_predicate # Only predicate provided .predicate = predicate else # Neither provided .query = (proc { klass.all }) .predicate = (proc { true }) end << end end |
#applies_to?(user) ⇒ Boolean
11 12 13 14 15 |
# File 'lib/papers_please/role.rb', line 11 def applies_to?(user) return @predicate.call(user) if @predicate.is_a? Proc true end |
#find_permission(action, subject) ⇒ Object
66 67 68 69 70 |
# File 'lib/papers_please/role.rb', line 66 def (action, subject) .detect do || .matches? action, subject end end |
#permission_exists?(action, subject) ⇒ Boolean
72 73 74 |
# File 'lib/papers_please/role.rb', line 72 def (action, subject) !(action, subject).nil? end |