Check if a permission exist before adding it

ping @BrunoSpy @arakkas

Does this seem logical to you? My idea of separating role loading and permission loading may have not been the best, I can see a lot of useless traversal and object creation here (each "hasPermission" creates a RecursiveIteratorIterator and do an iteration). But for advanced cases I think it makes sense to load them separately.