How to get the document's temporary permission to a User by workflow or lifecycle?

HI, Team.

There is the case, there are some documents have higher level of security that need a certain workflow to give permission to someone.  In some cases, the permission can only last for some days or forever. in the workflow, the user must submit the request and get audit. How can I make it out?