Skip to content

Commit 98925eb

Browse files
committed
always use base class when saving roles on resources
1 parent 8f559f1 commit 98925eb

4 files changed

Lines changed: 18 additions & 15 deletions

File tree

lib/rolify.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,7 @@ def self.resource_types
7373
@@resource_types
7474
end
7575

76+
def self.base_class_for(klass)
77+
klass.respond_to?(:base_class) ? klass.base_class : klass
78+
end
7679
end

lib/rolify/adapters/active_record/role_adapter.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ def where(relation, *args)
1111
def where_strict(relation, args)
1212
return relation.where(:name => args[:name]) if args[:resource].blank?
1313
resource = if args[:resource].is_a?(Class)
14-
{class: args[:resource].to_s, id: nil}
14+
{class: Rolify.base_class_for(args[:resource]).to_s, id: nil}
1515
else
16-
{class: args[:resource].class.name, id: args[:resource].id}
16+
{class: Rolify.base_class_for(args[:resource].class).name, id: args[:resource].id}
1717
end
1818

1919
relation.where(:name => args[:name], :resource_type => resource[:class], :resource_id => resource[:id])
2020
end
2121

2222
def find_cached(relation, args)
2323
resource_id = (args[:resource].nil? || args[:resource].is_a?(Class) || args[:resource] == :any) ? nil : args[:resource].id
24-
resource_type = args[:resource].is_a?(Class) ? args[:resource].to_s : args[:resource].class.name
24+
resource_type = args[:resource].is_a?(Class) ? Rolify.base_class_for(args[:resource]).to_s : Rolify.base_class_for(args[:resource].class).name
2525

2626
return relation.find_all { |role| role.name == args[:name].to_s } if args[:resource] == :any
2727

@@ -34,7 +34,7 @@ def find_cached(relation, args)
3434

3535
def find_cached_strict(relation, args)
3636
resource_id = (args[:resource].nil? || args[:resource].is_a?(Class)) ? nil : args[:resource].id
37-
resource_type = args[:resource].is_a?(Class) ? args[:resource].to_s : args[:resource].class.name
37+
resource_type = args[:resource].is_a?(Class) ? Rolify.base_class_for(args[:resource]).to_s : Rolify.base_class_for(args[:resource].class).name
3838

3939
relation.find_all do |role|
4040
role.resource_id == resource_id && role.resource_type == resource_type && role.name == args[:name].to_s
@@ -51,7 +51,7 @@ def add(relation, role)
5151

5252
def remove(relation, role_name, resource = nil)
5353
cond = { :name => role_name }
54-
cond[:resource_type] = (resource.is_a?(Class) ? resource.to_s : resource.class.name) if resource
54+
cond[:resource_type] = (resource.is_a?(Class) ? Rolify.base_class_for(resource).to_s : Rolify.base_class_for(resource.class).name) if resource
5555
cond[:resource_id] = resource.id if resource && !resource.is_a?(Class)
5656
roles = relation.roles.where(cond)
5757
if roles
@@ -104,10 +104,10 @@ def build_query(role, resource = nil)
104104
if resource
105105
query.insert(0, "(")
106106
query += " OR ((#{role_table}.name = ?) AND (#{role_table}.resource_type = ?) AND (#{role_table}.resource_id IS NULL))"
107-
values << role << (resource.is_a?(Class) ? resource.to_s : resource.class.name)
107+
values << role << (resource.is_a?(Class) ? Rolify.base_class_for(resource).to_s : Rolify.base_class_for(resource.class).name)
108108
if !resource.is_a? Class
109109
query += " OR ((#{role_table}.name = ?) AND (#{role_table}.resource_type = ?) AND (#{role_table}.resource_id = ?))"
110-
values << role << resource.class.name << resource.id
110+
values << role << Rolify.base_class_for(resource.class).name << resource.id
111111
end
112112
query += ")"
113113
end

lib/rolify/adapters/mongoid/role_adapter.rb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,17 @@ def where(relation, *args)
1111
def where_strict(relation, args)
1212
return relation.where(:name => args[:name]) if args[:resource].blank?
1313
resource = if args[:resource].is_a?(Class)
14-
{class: args[:resource].to_s, id: nil}
14+
{class: Rolify.base_class_for(args[:resource]).to_s, id: nil}
1515
else
16-
{class: args[:resource].class.name, id: args[:resource].id}
16+
{class: Rolify.base_class_for(args[:resource].class).name, id: args[:resource].id}
1717
end
1818

1919
relation.where(:name => args[:name], :resource_type => resource[:class], :resource_id => resource[:id])
2020
end
2121

2222
def find_cached(relation, args)
2323
resource_id = (args[:resource].nil? || args[:resource].is_a?(Class) || args[:resource] == :any) ? nil : args[:resource].id
24-
resource_type = args[:resource].is_a?(Class) ? args[:resource].to_s : args[:resource].class.name
24+
resource_type = args[:resource].is_a?(Class) ? Rolify.base_class_for(args[:resource]).to_s : Rolify.base_class_for(args[:resource].class).name
2525

2626
return relation.find_all { |role| role.name == args[:name].to_s } if args[:resource] == :any
2727

@@ -34,7 +34,7 @@ def find_cached(relation, args)
3434

3535
def find_cached_strict(relation, args)
3636
resource_id = (args[:resource].nil? || args[:resource].is_a?(Class)) ? nil : args[:resource].id
37-
resource_type = args[:resource].is_a?(Class) ? args[:resource].to_s : args[:resource].class.name
37+
resource_type = args[:resource].is_a?(Class) ? Rolify.base_class_for(args[:resource]).to_s : Rolify.base_class_for(args[:resource].class).name
3838

3939
relation.find_all do |role|
4040
role.resource_id == resource_id && role.resource_type == resource_type && role.name == args[:name].to_s
@@ -67,7 +67,7 @@ def remove(relation, role_name, resource = nil)
6767
# role.destroy if role.send(user_class.to_s.tableize.to_sym).empty?
6868
#end
6969
cond = { :name => role_name }
70-
cond[:resource_type] = (resource.is_a?(Class) ? resource.to_s : resource.class.name) if resource
70+
cond[:resource_type] = (resource.is_a?(Class) ? Rolify.base_class_for(resource).to_s : Rolify.base_class_for(resource.class).name) if resource
7171
cond[:resource_id] = resource.id if resource && !resource.is_a?(Class)
7272
roles = relation.roles.where(cond)
7373
roles.each do |role|
@@ -116,9 +116,9 @@ def build_query(role, resource = nil)
116116
return [{ :name => role }] if resource == :any
117117
query = [{ :name => role, :resource_type => nil, :resource_id => nil }]
118118
if resource
119-
query << { :name => role, :resource_type => (resource.is_a?(Class) ? resource.to_s : resource.class.name), :resource_id => nil }
119+
query << { :name => role, :resource_type => (resource.is_a?(Class) ? Rolify.base_class_for(resource).to_s : Rolify.base_class_for(resource.class).name), :resource_id => nil }
120120
if !resource.is_a? Class
121-
query << { :name => role, :resource_type => resource.class.name, :resource_id => resource.id }
121+
query << { :name => role, :resource_type => Rolify.base_class_for(resource.class).name, :resource_id => resource.id }
122122
end
123123
end
124124
query

lib/rolify/role.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def self.included(base)
1111

1212
def add_role(role_name, resource = nil)
1313
role = self.class.adapter.find_or_create_by(role_name.to_s,
14-
(resource.is_a?(Class) ? resource.to_s : resource.class.name if resource),
14+
(resource.is_a?(Class) ? Rolify.base_class_for(resource).to_s : Rolify.base_class_for(resource.class).name if resource),
1515
(resource.id if resource && !resource.is_a?(Class)))
1616

1717
if !roles.include?(role)

0 commit comments

Comments
 (0)