Module: Concentric::Model::ClassMethods

Defined in:
lib/kojac/concentric.rb

Instance Method Summary collapse

Instance Method Details

#allow(aRing, aAbilities) ⇒ Object

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



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# 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]
				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) ⇒ Boolean

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

Returns:

  • (Boolean)


151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# 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) ⇒ Object

returns properties that this ring can use this ability on



128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# 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) ⇒ Object

deprecated



123
124
125
# File 'lib/kojac/concentric.rb', line 123

def ring(aRing,aAbilities)
	allow(aRing,aAbilities)
end

#ring_can?(aRing, aAbility, aFields = nil) ⇒ Boolean

deprecated

Returns:

  • (Boolean)


174
175
176
# File 'lib/kojac/concentric.rb', line 174

def ring_can?(aRing,aAbility,aFields=nil)
	allowed?(aRing,aAbility,aFields)
end