I think this whole think has become much more complicated than it needs to be. If it were me, I would adjust application to work within the confines of the security so I would not have to make a lot of changes.
But as I understand your security, you don't have the native (i.e. easy) ability to define a set of roles based on some application data element (in my case, some user's roles are defined by the project they are working on).
For example, when a user comes into the application, they are going to have to choose which project to work on, right?
The application tracks a default project, which is the project that is used when they login.
Why not do something with security at that point.
Er, I thought I was
As soon I know who they are (they have been authenticated), I have to figure out if they are 'enterprise' users or 'project' users, which will determine if their roles need to be changed. In all cases I need to figure out their default project, so I can setup the 'context' for the application.
Or what if your projects allows certain users to associated with it, rather than trying to go the other way around.
Huh? I'm associating projects to users (remember, 'project' is an in application term, describing data within that application, not a VS project), or if you prefer users to projects. It is a linking table (userID, projectID).
I don't know your application, but I do know that we can come up with a more simple solution that what you have been doing lately. When it starts getting complicated like this...we always sit down as a team and figure out another avenue to travel.
I'm all ears,
But here is what I'm dealing with:
1. Two basic classes of users: those who have access to all projects and those whose access is determined by project.
2. For users who have access determined by the project, I will need to dynamically set the access based on project.
3. In SF (as I understand it), I must set the roles for a user before they are logged on.