Module: ObjectBouncer::Doorman::ClassMethods
- Defined in:
- lib/objectbouncer/class_methods.rb
Instance Method Summary collapse
- #apply_policies ⇒ Object
- #as(accessee) ⇒ Object
- #blank_policy_template ⇒ Object
- #current_user ⇒ Object
- #current_user=(user) ⇒ Object
- #deny(method, options = {}) ⇒ Object
- #door_policy(&block) ⇒ Object
- #enforced? ⇒ Boolean
- #overwrite_initialize ⇒ Object
- #policies ⇒ Object
- #policies=(hash) ⇒ Object
- #protect_method!(method) ⇒ Object
Instance Method Details
#apply_policies ⇒ Object
78 79 80 81 82 |
# File 'lib/objectbouncer/class_methods.rb', line 78 def apply_policies policies.keys.each do |method| protect_method!(method) end end |
#as(accessee) ⇒ Object
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/objectbouncer/class_methods.rb', line 46 def as(accessee) new_klass = self.clone new_klass.table_name = self.table_name if respond_to?(:table_name) if respond_to?(:connection_handler) new_klass.establish_connection self.connection_handler.connection_pools[name].spec.config end new_klass.instance_eval do include ObjectBouncer::Doorman end new_klass.policies = self.policies new_klass.current_user = accessee new_klass.apply_policies new_klass end |
#blank_policy_template ⇒ Object
30 31 32 |
# File 'lib/objectbouncer/class_methods.rb', line 30 def blank_policy_template { :if => [], :unless => [] } end |
#current_user ⇒ Object
42 43 44 |
# File 'lib/objectbouncer/class_methods.rb', line 42 def current_user @current_user end |
#current_user=(user) ⇒ Object
38 39 40 |
# File 'lib/objectbouncer/class_methods.rb', line 38 def current_user=(user) @current_user = user end |
#deny(method, options = {}) ⇒ Object
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/objectbouncer/class_methods.rb', line 67 def deny(method, = {}) policies[method] ||= blank_policy_template if .has_key?(:if) policies[method][:if] << [:if] elsif .has_key?(:unless) policies[method][:unless] << [:unless] else policies[method][:if].unshift(Proc.new{ true == true }) end end |
#door_policy(&block) ⇒ Object
61 62 63 64 65 |
# File 'lib/objectbouncer/class_methods.rb', line 61 def door_policy(&block) @policies = {} yield apply_policies end |
#enforced? ⇒ Boolean
34 35 36 |
# File 'lib/objectbouncer/class_methods.rb', line 34 def enforced? ObjectBouncer.enforced? end |
#overwrite_initialize ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/objectbouncer/class_methods.rb', line 4 def overwrite_initialize class_eval do unless method_defined?(:objectbouncer_initialize) define_method(:objectbouncer_initialize) do |*args, &block| original_initialize(*args, &block) @policies = self.class.policies apply_policies self end end if instance_method(:initialize) != instance_method(:objectbouncer_initialize) alias_method :original_initialize, :initialize alias_method :initialize, :objectbouncer_initialize end end end |
#policies ⇒ Object
26 27 28 |
# File 'lib/objectbouncer/class_methods.rb', line 26 def policies @policies end |
#policies=(hash) ⇒ Object
22 23 24 |
# File 'lib/objectbouncer/class_methods.rb', line 22 def policies=(hash) @policies = hash end |
#protect_method!(method) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/objectbouncer/class_methods.rb', line 84 def protect_method!(method) renamed_method = "#{method}_without_objectbouncer".to_sym if method_defined?(method) return if method_defined?(renamed_method) alias_method renamed_method, method define_method method do |*args, &block| if call_denied?(method, *args) raise ObjectBouncer::PermissionDenied.new else send(renamed_method, *args, &block) end end end end |