Move empty() check to the role itself
Rename traverseRoles -> getRolesIterator