Take a look at the Admin example in https://concepts.glideapp.io/ . In there I assign an Admin group to certain users and only they have access to all data. Maybe that will give you some ideas.
You could also use an array of relations either by creating numbered columns with values for each related group that become an array, or using a relation and a lookup to another sheet that would contain a row for each group a user would have access to (Basically a relation in your sheet, a lookup using that relation, then another relation built off of that lookup). It’s really hard to explain without having real data to look at, but it would probably work. That way you could assign a project to each projects group as well as the manager. The manager would be assigned to all projects.
Or you could have a detail page with 2 lists. The first list would use a relation to link the manager to the projects that contain that manager. The second list would use a relation to link the each rep to each project that they are a part of. If set up right each user should only see one list since. A manager will never be a rep and a rep will never be a manager.
I’m kind of saying a lot and it probably only makes sense in my head. Without seeing actual data, that’s about the best explanation I can give.