Answer
AppProjects enforce what can be deployed (allowed repos, destinations, resource kinds) while RBAC enforces who can act on which project's apps. Together they isolate tenants: a team's role is scoped to its project, and the project restricts that team's apps to approved repos, clusters, and namespaces—limiting both authority and blast radius.
# Project restricts destinations; RBAC restricts who can sync them
p, role:team-a, applications, sync, team-a/*, allowReal-world example Team A can only sync apps in its project, and that project can only deploy to team-a namespaces on approved clusters.