Class: Maybee::Authorization
- Inherits:
-
Object
- Object
- Maybee::Authorization
- Defined in:
- lib/maybee/authorization.rb
Instance Attribute Summary collapse
-
#access ⇒ Object
readonly
Returns the value of attribute access.
-
#allow_nil ⇒ Object
readonly
Returns the value of attribute allow_nil.
-
#conditionals ⇒ Object
readonly
Returns the value of attribute conditionals.
-
#subject_classes ⇒ Object
readonly
Returns the value of attribute subject_classes.
Instance Method Summary collapse
- #granted?(object, subject) ⇒ Boolean
-
#initialize(access, subject_classes, options) ⇒ Authorization
constructor
A new instance of Authorization.
Constructor Details
#initialize(access, subject_classes, options) ⇒ Authorization
Returns a new instance of Authorization.
6 7 8 9 10 11 12 13 14 |
# File 'lib/maybee/authorization.rb', line 6 def initialize(access, subject_classes, ) raise ArgumentError, "Access name must be symbol" unless access.is_a?(Symbol) @access = access #raise ArgumentError, "Subject classes must be an array" unless subject_classes.is_a?(Array) @subject_classes = subject_classes.empty? ? nil : subject_classes .assert_valid_keys(:if, :unless, :if_subject, :unless_subject, :allow_nil) @allow_nil = .delete(:allow_nil) @conditionals = .empty? ? nil : end |
Instance Attribute Details
#access ⇒ Object (readonly)
Returns the value of attribute access.
4 5 6 |
# File 'lib/maybee/authorization.rb', line 4 def access @access end |
#allow_nil ⇒ Object (readonly)
Returns the value of attribute allow_nil.
4 5 6 |
# File 'lib/maybee/authorization.rb', line 4 def allow_nil @allow_nil end |
#conditionals ⇒ Object (readonly)
Returns the value of attribute conditionals.
4 5 6 |
# File 'lib/maybee/authorization.rb', line 4 def conditionals @conditionals end |
#subject_classes ⇒ Object (readonly)
Returns the value of attribute subject_classes.
4 5 6 |
# File 'lib/maybee/authorization.rb', line 4 def subject_classes @subject_classes end |
Instance Method Details
#granted?(object, subject) ⇒ Boolean
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/maybee/authorization.rb', line 16 def granted?(object, subject) return false if !@allow_nil && @subject_classes && @subject_classes.none? { |klass| subject.is_a?(klass) } return true unless @conditionals return true if @conditionals.all? do |clause, cond| next(false) if subject.nil? && !@allow_nil if :if_subject == clause || :unless_subject == clause receiver, argument = subject, object else receiver, argument = object, subject end result = if cond.is_a?(Proc) if cond.arity == 1 receiver.instance_exec(argument, &cond) else receiver.instance_exec(&cond) end else receiver.send(cond) end (:if_subject == clause || :if == clause) ? result : !result end false end |