diff --git a/lib/access-granted/permission.rb b/lib/access-granted/permission.rb index a1f909b..745d436 100644 --- a/lib/access-granted/permission.rb +++ b/lib/access-granted/permission.rb @@ -17,7 +17,9 @@ def matches_action?(action) end def matches_subject?(subject) - subject == @subject || subject.class <= @subject + subject == @subject || + (subject.is_a?(Class) && @subject.is_a?(Class) && subject <= @subject) || + subject.class <= @subject end def matches_conditions?(subject) diff --git a/spec/permission_spec.rb b/spec/permission_spec.rb index fe744e6..ab6a070 100644 --- a/spec/permission_spec.rb +++ b/spec/permission_spec.rb @@ -49,6 +49,11 @@ expect(perm.matches_subject? String).to eq(true) end + it "matches if superclass of class object is equal to subject" do + perm = subject.new(true, :read, Exception) + expect(perm.matches_subject? StandardError).to eq(true) + end + it "matches if class is equal to subject" do perm = subject.new(true, :read, String) expect(perm.matches_subject? "test").to eq(true)