authorizer 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,5 +3,5 @@ $:.unshift(File.dirname(__FILE__)) unless
3
3
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
4
4
 
5
5
  module Authorizer
6
- VERSION = '0.0.3'
6
+ VERSION = '0.0.4'
7
7
  end
@@ -207,6 +207,55 @@ module Authorizer
207
207
  end
208
208
 
209
209
  protected
210
+
211
+ ############################################################################
212
+ # get_topmost_class
213
+ ############################################################################
214
+ # Get the topmost class for the given class, not going higher up the tree
215
+ # than ActiveRecord::Base or Object
216
+ ############################################################################
217
+
218
+ def self.get_topmost_class(klazz)
219
+ raise "Please provide me with a Class object." unless klazz.is_a?(Class)
220
+
221
+ top_klazz = klazz
222
+ next_top_klazz = nil
223
+
224
+ begin
225
+ next_top_klazz = top_klazz.superclass
226
+ rescue
227
+ end
228
+
229
+ if next_top_klazz
230
+ until next_top_klazz.eql?(ActiveRecord::Base) || next_top_klazz.eql?(Object)
231
+ top_klazz = next_top_klazz
232
+ next_top_klazz = top_klazz.superclass
233
+ end
234
+ end
235
+
236
+ top_klazz
237
+ end
238
+
239
+ ############################################################################
240
+ # array_of_string_subclasses
241
+ ############################################################################
242
+ # Call the protected 'subclasses' method and convert all class names to string.
243
+ ############################################################################
244
+
245
+ def self.array_of_string_subclasses(klazz)
246
+ raise "Need a Class object." unless klazz.is_a?(Class)
247
+
248
+ ret = []
249
+
250
+ for c in klazz.subclasses
251
+ ret.push(c.to_s)
252
+ end
253
+
254
+ # Also, we must include the class itself.
255
+ ret.push(klazz.to_s)
256
+
257
+ ret
258
+ end
210
259
 
211
260
  ############################################################################
212
261
  # get_current_user
@@ -267,10 +316,14 @@ module Authorizer
267
316
  # oooo ooo ooo ___ --- === __- --_- ++_+_ =--- +- =+=-=- =-= <--- ice beam!
268
317
  unless klazz.nil?
269
318
  # now we know klazz really exists.
319
+ # This class might be some subclass. Let's find out what the topmost class is.
320
+ topmost_class = get_topmost_class(klazz)
321
+ # Get an array that contains all subclasses of the topmost class
322
+ subclasses_of_topmost_class = array_of_string_subclasses(topmost_class)
270
323
  # let's find the object_role objects that match the user and klazz.
271
324
  # Get the object_role objects
272
- object_roles_conditions = { :klazz_name => class_name, :user_id => user.id }
273
- object_roles = ObjectRole.find(:all, :conditions => object_roles_conditions )
325
+ object_roles_conditions = { :user_id => user.id }
326
+ object_roles = ObjectRole.find_all_by_klazz_name(subclasses_of_topmost_class, :conditions => object_roles_conditions )
274
327
  # OK.
275
328
  # We already have the comprehensive list of object roles we are authorized on.
276
329
  unless object_roles.nil?
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: authorizer
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 23
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 3
10
- version: 0.0.3
9
+ - 4
10
+ version: 0.0.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - CmdJohnson
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-09-27 00:00:00 Z
18
+ date: 2011-10-11 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: options_checker