class Maybee::Authorization
Attributes
access[R]
allow_nil[R]
conditionals[R]
subject_classes[R]
Public Class Methods
new(access, subject_classes, options)
click to toggle source
# File lib/maybee/authorization.rb, line 6 def initialize(access, subject_classes, options) 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 options.assert_valid_keys(:if, :unless, :if_subject, :unless_subject, :allow_nil) @allow_nil = options.delete(:allow_nil) @conditionals = options.empty? ? nil : options end
Public Instance Methods
granted?(object, subject)
click to toggle source
# 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