module Authority module UserAbilities # Should be included into whatever class represents users in an app. # Provides methods like `can_update?(resource)` # Exactly which methods get defined is determined from `config.abilities`; # the module is evaluated after any user-supplied config block is run # in order to make that possible. # All delegate to corresponding methods on the resource. Authority.verbs.each do |verb| class_eval <<-RUBY, __FILE__, __LINE__ + 1 def can_#{verb}?(resource, options = {}) if options.empty? resource.#{Authority.abilities[verb]}_by?(self) else resource.#{Authority.abilities[verb]}_by?(self, options) end end RUBY end def can?(action) ApplicationAuthorizer.send("can_#{action}?", self) end end end