You would have multiple screens in your app. Different screens for the different functions. How I have handled this situation is to have a Welcome screen and a button for each different function.
I have a backend access control list. For example: In one of my Apps I have a list of developers on 2 different teams. I identify those who are managers with a Yes/No column called IsManager.
In the app that they access, Managers can see all the buttons on the welcome screen and non-managers can only see 2 buttons. Those buttons control what they can access. On AppStart I set a variable called Manager to true by looking up to the Access control list and seeing if the person is listed as a manager or not.
You can use either the User() function or the Office365Users connector to compare to your access list. In your access list, you would need to use a unique identifier that is also available in the User() function and the Office365Users connector. I have found that email is the best option.
You can set a variable like this: Set(varManager, LookUp(AccessList, Title = Office365Users.MyProfileV2().Mail).IsManager) IsManager can be replaced with whatever field you are using to define the role the user has.
Once your variable is set you can use it in the Visible or DisplayMode properties of your buttons or other navigation elements you are using in the app that allow users to navigate between screens.
Like this:
If your variable is true/false
Visible: varRole
DisplayMode: If( varRole, DisplayMode.Edit, DisplayMode.Disabled)
If your variable is not true/false
Visible: If(varRole = "RoleValue", true, false)
DisplayMode: If( varRole = "RoleValue", DisplayMode.Edit, DisplayMode.Disabled)
I hope this helps