You can use row-level security. This is done in the universe, and will cause a condition to be inserted into the report's SQL to restrict results based on the user's credentials.
The "out-of-the-box" method for implementing row-level security is accessed in UDT via Tools -> Manage Security -> Manage Access Restrictions, or in IDT via Window -> Security Editor. The interfaces are very different, but accomplish the same result -- you select a group and create a condition that should be applied for all members in that group.
You can also implement row-level security without using the built-in security managers described above. If you have a table in your database that contains a mapping of user ID to region, the logic can be implemented right in the universe.
Note that in both of the above solutions, the security is implemented by adjusting the report's SQL. If the users have the ability to modify SQL, then they can override the security. This may or may not be a concern for you, but it is worth being aware of.