'How would you design the following model' - From the information supplied, this is my thought process.
Company --< CompanyLocation >-- Location
"CompanyLocation"
PK CompanyLocationId
FK CompanyId
FK LocationId
I'm taking a guess that more than one company can share a location, so this this relationship table makes this possible.
User --< UserCompanyLocation >-- CompanyLocation
"UserCompanyLocation"
PK UserCompanyLocationId
FK UserId
FK CompanyLocationId
Primary
This table related the user to the Company in the location - and allows the user to set if it's his primary location.
Company --< CompanyRole >-- Role
"CompanyRole"
PK CompanyRoleId
FK CompanyId
FK RoleId
This table shows what companies contain which roles.
User --< UserCompanyRole >-- CompanyRole
"UserCompanyRole"
PK UserCompanyRoleId
FK UserId
FK CompanyRoleId
Now the user can be assigned to a specific role in the company. You could also add a 'primary' column if you want a user to be able to assign a primary role.
Does this help at all?
EDIT:
The other option is to remove the UserCompanyRole and UserCompanyLocation tables and merge them in to one UserCompanyRoleLocation table. There are plusses and minuses to doing this; it would cause duplicate location rows for each role and vice-versa - but it would make the joins and queries a bit easier.
User --< UserCompanyRoleLocation >-- CompanyRole
User --< UserCompanyRoleLocation >-- CompanyLocation
"UserCompanyRoleLocation"
PK UserCompanyRoleLocation
FK User
FK CompanyRole
FK CompanyLocation
Primary