Hi Mav,
In this case, probably, server global cache will work and you can use formname+userId as cache key.
Alternatively, You can use table where you can store information about the user who already opened the form.
One form init you can check if there is a record in the table and if it's not, open a form and insert record to the table with current user id, if yes, throw an error that user can't open another instance of the form.
On form close, you need to remove the record for the current user from the table.
At least with the table, you have admin access to fix the issue by deleting the record if something goes wrong.
Also, it would be good to clean the table on AOS startup (Application.starupPost) in case of AOS went down.