lib/authority.rb in authority-0.0.1 vs lib/authority.rb in authority-0.2.0
- old
+ new
@@ -1,11 +1,60 @@
require 'active_support/concern'
require 'active_support/core_ext/class/attribute'
+require 'active_support/core_ext/hash/keys'
require 'active_support/core_ext/string/inflections'
+require 'logger'
module Authority
- ADJECTIVES = %w[creatable readable updatable deletable]
+
+ # NOTE: once this method is called, the library has started meta programming
+ # and abilities should no longer be modified
+ def self.abilities
+ configuration.abilities.freeze
+ end
+
+ def self.verbs
+ abilities.keys
+ end
+
+ def self.adjectives
+ abilities.values
+ end
+
+ def self.enforce(action, resource, user)
+ action_authorized = user.send("can_#{action}?", resource)
+ unless action_authorized
+ message = "#{user} is not authorized to #{action} this resource: #{resource.inspect}"
+ raise SecurityTransgression.new(message)
+ end
+ resource
+ end
+
+ class << self
+ attr_accessor :configuration
+ end
+
+ def self.configure
+ self.configuration ||= Configuration.new
+ yield(configuration) if block_given?
+ require_authority_internals!
+
+ configuration
+ end
+
+ private
+
+ def self.require_authority_internals!
+ require 'authority/abilities'
+ require 'authority/authorizer'
+ require 'authority/user_abilities'
+ end
+
+ class SecurityTransgression < StandardError ; end
+
end
-require 'authority/abilities'
-require 'authority/authorizer'
+require 'authority/configuration'
+require 'authority/controller'
+require 'authority/railtie' if defined?(Rails)
require 'authority/version'
+