This task winds up being somewhere between trivial simple and prohibitively hard depending on quirks you might have.
To begin with, all your data is filtered by the origins that are associated with the user logging in. So if you have one page with a list portlet on it, that list will automatically display only the data the user has authority to view. This might be all you need.
One step more complex, in the dashboard designer, there are global variables that are made available that enumerate the list of allowed origins in a couple different ways - mainly though to be used in the where clause of a SQL query.
If you are stuck though in a situation where origin doesn't filter fine enough, you might be able to generate the necessary filter using the SQL table widget and SQL you provide that maybe joins with another table you create that defines your access restrictions.
It is possible to reverse engineer how the reports, lists, and dashboards are constructed and it;s possible to code something (even crudely in an Excel field formula for instance) to automate the generation of the user specific parts of the UI.
There's also an SDK for formally automating the creation of UIs but I've never gotten that to work - last time I tried, when the script ran and loaded the DLL that encapsulates the dashboard generation calls, it crashed my nas. Not fun to discover that....
If you have few enough users, it might be faster just to create custom pages for each one. At least with the dashboards, there is the concept of a variable/parameter so you can define the parameter once and then use it wherever supported and necessary.
Maybe that's enough to get you started?
-Garin