I have an InfoPath 2010 form/document with a person picker field. Because InfoPath people picker fields cannot be properly promoted to user columns in SharePoint, when the document is saved to the document library on SharePoint 2010, a custom workflow copies the value in that picker to a user column. This part appears to work fine and allows for sending emails to that user.
The problem occurs when I try to use that same field to add or replace an item level permission for the document. I have this in an impersonation step, but the workflow errors out when it gets to this step. The error message in the ULS logs reads "Some of persons or groups used in permission conditions/actions are missing." I have tried changing the Return Field As type to something other than String on the workflow user lookup, but all still yield the same results.
As a test, I created a custom list with a user column and a similar workflow to assign item level permissions. It works with no problem. As a second test, I created another user column back on the original document library. Rather than assigning the value based on the promoted people picker in the document, I assigned a value manually through the document properties dialog in SharePoint, then set the workflow to assign permission to that user. It worked, which means the breakage is happening somewhere in the copying of the user value from the people picker field to the user field.
Surely someone has a solution this other than writing a custom Event Receiver in Visual Studio. I have to think that unique permission is a common requirement on InfoPath docs.