Module: Zuul::ActionController::ClassMethods

Defined in:
lib/zuul/action_controller.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.extended(base) ⇒ Object



53
54
55
56
57
# File 'lib/zuul/action_controller.rb', line 53

def self.extended(base)
  base.send :cattr_accessor, :used_acl_filters
  base.send :class_variable_set, :@@used_acl_filters, 0
  base.send :attr_accessor, :acl_dsl
end

Instance Method Details

#access_control(*args, &block) ⇒ Object



59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/zuul/action_controller.rb', line 59

def access_control(*args, &block)
  opts, filter_args = parse_access_control_args(*args)
  
  callback_method = "_zuul_callback_before_#{acl_filters.length+1}".to_sym
  define_method callback_method do |controller|
    controller.acl_dsl ||= DSL::Base.new(controller)
    controller.acl_dsl.configure opts
    controller.acl_dsl.execute &block
    self.class.used_acl_filters += 1

    if self.class.used_acl_filters == self.class.acl_filters.length
      self.class.used_acl_filters = 0
      raise Exceptions::AccessDenied if !controller.acl_dsl.authorized? && controller.acl_dsl.mode != :quiet
    end
  end
  append_before_filter "#{callback_method.to_s}(self)", filter_args
end

#acl_filtersObject



77
78
79
# File 'lib/zuul/action_controller.rb', line 77

def acl_filters
  _process_action_callbacks.select { |f| f.kind == :before && f.instance_variable_get(:@filter).match(/\A_zuul_callback_before_.*/) }
end

#filter_keysObject



106
107
108
# File 'lib/zuul/action_controller.rb', line 106

def filter_keys
  [:except, :only]
end

#parse_access_control_args(*args) ⇒ Object

def deny_permissions(permissions, *args, &block) end alias_method :deny_permission, :deny_permissions



98
99
100
101
102
103
104
# File 'lib/zuul/action_controller.rb', line 98

def parse_access_control_args(*args)
  args = args[0] if args.is_a?(Array)
  args = {} if args.nil?
  filter_args = args.select { |k,v| filter_keys.include?(k) }
  args.reject! { |k| filter_keys.include?(k) }
  return [args, filter_args]
end