Impersonating a users in an extension

I know this may sound a bit esoteric, but we have the need to elevate a user’s role during an extension in order to transitions “child” items through a workflow. We have some business rules which state that if an content item has an associated child content item which is being used by more than one parent content item and that child content item has never been in a public state we do not push the parent.

Since we are doing this in a workflow action, and no way to cancel a transition, we need to move the parent back to the previous state it was in. Since content editors will have the assignment type of Reader they cannot rollback. (Well they cannot rollback with out random errors being thrown)

What we would like to do so that everyone does not have to be an admin is to either impersonate an admin when we need to transition back or elevate the user to have admin privledges. Is there a way to do this?

I can think of a wierd work around, and that would be to call the webservices logging in as an admin and then doing the transition. This seems the roundabout way of doing this. Any suggestions would be appreciated.

P.S. Yes, we plan to investigate creating a pre-workflow relationship affect for the slots which follow these rules, but that best approach is to combine this with the workflow action so there will not be any missed scenarios.