class Robotnik::Authorization::Status
Public Class Methods
matches?(rule_condition, resource, options)
click to toggle source
# File lib/stasi/authorization/status.rb, line 39 def self.matches? rule_condition, resource, options return true if options.has_key?(:as) && options[:as] == rule_condition rule_condition = rule_condition.to_proc if rule_condition.respond_to?(:to_proc) begin rule_condition === resource rescue ArgumentError rule_condition.call(resource, options[:agent]) end end
Public Instance Methods
can(action, resource, conditions=nil, &block)
click to toggle source
# File lib/stasi/authorization/status.rb, line 7 def can action, resource, conditions=nil, &block init_rule_for resource rules[resource][action] = conditions || block || true end
can?(action, resource, options={})
click to toggle source
# File lib/stasi/authorization/status.rb, line 17 def can? action, resource, options={} verdict = false rules.each do |rule_condition, actions| if Robotnik::Authorization::Status.matches? rule_condition, resource, options action_condition = actions[action] verdict = case action_condition when true, false then action_condition else if action_condition.respond_to?(:call) action_condition.call(resource) else deliberation = true deliberation = deliberation && action_condition[:if].to_proc.call(resource) if action_condition.has_key?(:if) deliberation = deliberation && (! action_condition[:unless].to_proc.call(resource)) if deliberation && action_condition.has_key?(:unless) deliberation end end end end verdict end
cannot(action, resource)
click to toggle source
# File lib/stasi/authorization/status.rb, line 12 def cannot action, resource init_rule_for resource rules[resource][action] = false end
Private Instance Methods
init_rule_for(resource)
click to toggle source
# File lib/stasi/authorization/status.rb, line 55 def init_rule_for resource rules[resource] ||= {} end
rules()
click to toggle source
# File lib/stasi/authorization/status.rb, line 51 def rules @rules ||= {} end