We're working on a project to run our existing (10 year old) application inside of Salesforce as a Canvas Application. One of our requirements is to control functionality within our Canvas application based on the Salesforce User's profile. This would be handled by creating a set of users within our application that are granted the appropriate privileges using our existing administration functions. We're looking to make a Managed App that we can provide to our customers to install within their organizations. And since each organization can have different profiles, our solution needs to be flexible enough to work for any org. We'd also like to avoid coding within our canvas app to implement a new client. We'd like to give them the managed app to install and maybe a set of instructions for pre-requisite setup in their org.
We've created multiple buttons/tabs as ways to launch the canvas app that will pass some level of configuration with the Signed Request. Part of that information will be the log-in credentials to our application that are associated to their Salesforce Profile. Which is where the problem for us lies.
Since Profile is not a customizable Object, we can't put a custom field on that Object to contain the credential it should be associated with. The next idea I had was to create a custom object with a reference to a Profile Object and a text field to store the corresponding login credential to our system. However, when i tried to create that custom object, I found that Profile was not one of the Objects that could be used when using a "Lookup Relationship" type field.
At that point, all I could do was create a Custom Object with a couple of text fields. One that would hold a Profile Id and the other the login credential. My problem then lies in how we populate that object. If we create a layout for that object, they'll be presented with 2 text boxes, and they'd have to manually enter the ProfileId value.
Is there some easier way to create this data mapping in the Salesforce world? How would objects be defined? How would data be entered for those objects?