Have a script that runs on log-in, and check for the current user name (or privilege set) and take them to the layout appropriate for their account. It might be, in outline:
If ( Get (CurrentAccountName ) = "admin" )
Go to Layout (Input )
Else If ( Get (CurrentAccountName ) = "Librarian" )
Go to Layout (Library )
Else If ( Get (CurrentAccountName ) = "Accountant" )
Go to Layout (Accounts)
Go to Layout ( Main Menu )
If you want functionality at the User level then you can use a Staff table where the AD user account is stored (NEVER THE PASSWORD) within the staff table. This table then holds the privileges which can be administered by the managers, such as OpeningLayout (in your case) and other such settings. In this way, you can extend the functionality to individuals and not just privilege groups and it can be administered by Management.
This does NOT replace security and privileges. Opening script goes to the Staff table (behind a freeze window), finds the user and loads global variable with UserID (AD) and, in this case, could follow with single script step of: Go To Layout [ by calculation ; Staff::OpeningLayout ]
You must add to your administering tasks that if you ever change the name of one of these layouts, you change the data in that field in the Staff table. I keep a list of things to watch for if I ever make a change to any portion of a solution or field to protect from my forgetting (or some other Developer working on the solution and not knowing).