I'm not sure about this. This can lead to false negative:

If Role A has permission "foo" and is children of role B, I expect $roleB->hasPermission('foo') to return true. If I move the recursion logic to Rbac, I will have false.