Conditionally expose filter
I would make a view with your base settings, and then make two displays: one with the exposed filter, and then one without.  Then use your normal access control methods to show the proper display at the proper setting.

For example, if you use views-as-blocks, add visibility rules.  If you use panels, use a new page variant w/ access settings, or add access settings to the content pane.

Otherwise, your best option is to implement the view hooks and experiment.  See what $view looks like with the exposed filter and without.  Add your logic, and make the one look like the other.  Unfortunately, what you can do in view hooks is rather sparsely documented; I always tackle this through trial and error.