Seems to me you've solved your own question.
Staff (or "people") is a many-many with projects, with the join table
also acting as a role identifier. Since your join here has attributes
of its own (the role), probably a has_many :through makes more sense.
Something along the lines of:
class Person < AR
has_many :projects, :through => roles
It might get interesting if you allow a person to have MULTIPLE roles
on a project though.