Module: AnnotationSecurity::Rails

Defined in:
lib/annotation_security/rails.rb,
lib/annotation_security/rails/filters.rb,
lib/annotation_security/rails/extensions.rb,
lib/annotation_security/rails/2/initializer.rb,
lib/annotation_security/rails/3/initializer.rb,
lib/annotation_security/rails/2/model_observer.rb,
lib/annotation_security/rails/3/model_observer.rb

Overview

lib/annotation_security/rails/3/model_observer.rb

Contains SecurityObserver which implements constraint checking for model classes.

Defined Under Namespace

Modules: ActiveRecord, Filters Classes: ModelObserver, Railtie

Class Method Summary collapse

Class Method Details

.init!(config) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/annotation_security/rails/2/initializer.rb', line 8

def self.init!(config)

  puts "Initializing AnnotationSecurity security layer (v#{AnnotationSecurity::VERSION})"

  # Policy files are situated under RAILS_ROOT/config/security
  # Default policy file is internal, load it
  ::AnnotationSecurity.load_relations(File.dirname(__FILE__) + '/../../policy/all_resources_policy')

  # Add AnnotationSecurity::Rails::ModelObserver to observe changes in models.
  # See http://riotprojects.com/2009/1/18/active-record-observers-in-gems-plugins
  #
  config.after_initialize do
    # Set up a dummy security context that does not interfer with script
    ::SecurityContext.initialize nil

    ::ActiveRecord::Base.observers << ::AnnotationSecurity::Rails::ModelObserver

    # In development mode, the models we observe get reloaded with each request. Using
    # this hook allows us to reload the observer relationships each time as well.
    ::ActionController::Dispatcher.to_prepare(:cache_advance_reload) do
      ::AnnotationSecurity.reset
      ::AnnotationSecurity::Rails::ModelObserver.instance.reload_model_observer
    end
  end

  puts "Security layer initialized"
end