module Concentric::Model::ClassMethods
Public Instance Methods
allow(aRing,aAbilities)
click to toggle source
supports different formats : allow :sales, :write => [:name,:address] ie. sales can write the name and address fields allow :sales, :read ie. sales can read this model allow :sales, [:read, :create, :destroy] ie. sales can read, create and destroy this model
# File lib/kojac/concentric.rb, line 93 def allow(aRing,aAbilities) #aRing.each {|r| ring(r,aAbilities)} and return if aRing.is_a? Array shouldn't need this because of ring system aRing = Concentric.lookup_ring(aRing) raise "aRing must be a number or a symbol defined in Concentric.config.ring_names" if !aRing.is_a?(Fixnum) raise "aAbilities must be a Hash" unless aAbilities.is_a? Hash # eg. :write => [:name,:address] ring_rec = self.rings_abilities[aRing] aAbilities.each do |abilities, fields| abilities = [abilities] unless abilities.is_a?(Array) fields = [fields] unless fields.is_a?(Array) next if fields.empty? abilities.each do |a| a = a.to_sym ring_rec ||= {} if fields==[:this] || fields==[true] ring_rec[a] = true unless ring_rec[a].to_nil else ring_fields = ring_rec[a] ring_fields = [] unless ring_fields.is_a? Array ring_fields = ring_fields + fields.map(&:to_sym) ring_fields.uniq! ring_fields.sort! ring_rec[a] = ring_fields end end self.rings_abilities[aRing] = ring_rec end end
allowed?(aRing,aAbility,aFields=nil)
click to toggle source
Query aFields specifies fields you require to act on This is no longer used by KojacBasePolicy because it does not observe its filters that operate on fields. It may still provide a faster check when there are no filters applied
# File lib/kojac/concentric.rb, line 151 def allowed?(aRing,aAbility,aFields=nil) if aFields pf = permitted(aRing,aAbility) if aFields.is_a? Array return (aFields - pf).empty? else return pf.include? aFields end end aRing = Concentric.lookup_ring(aRing) return [] unless aRing and rings_abilities = self.respond_to?(:rings_abilities).to_nil && self.rings_abilities ring_keys = rings_abilities.keys.sort ring_keys.each do |i| next unless i >= aRing next unless ring_rec = rings_abilities[i] return true if ring_rec[aAbility.to_sym].to_nil end return false end
permitted(aRing,aAbility)
click to toggle source
returns properties that this ring can use this ability on
# File lib/kojac/concentric.rb, line 128 def permitted(aRing,aAbility) aRing = Concentric.lookup_ring(aRing) raise "aRing must be a number or a symbol defined in Concentric.config.ring_names" if !aRing.is_a?(Fixnum) return [] unless aRing and rings_abilities = self.respond_to?(:rings_abilities) && self.rings_abilities.to_nil fields = [] ring_keys = rings_abilities.keys.sort ring_keys.each do |i| next unless i >= aRing next unless ring_rec = rings_abilities[i] if af = ring_rec[aAbility.to_sym] next if af==true fields += af if af.is_a?(Array) end end fields.uniq! fields.sort! fields end
ring(aRing,aAbilities)
click to toggle source
deprecated
# File lib/kojac/concentric.rb, line 123 def ring(aRing,aAbilities) allow(aRing,aAbilities) end
ring_can?(aRing,aAbility,aFields=nil)
click to toggle source
deprecated
# File lib/kojac/concentric.rb, line 174 def ring_can?(aRing,aAbility,aFields=nil) allowed?(aRing,aAbility,aFields) end