One option might be to create a stored procedure under the user who owns the materialized views. In the procedure, you could refresh the views using dbms_mview.refresh(). The user then just calls this procedure.

If the procedure is created with definer rather than invoker rights (the default), then it should be executed under the privileges of the procedure owner rather than the user invoking it.