Intercept the Run method of your bootstrapper by defining a new Run method, fetch the list of modules (list trimmed to the user in question of course) and populate the catalog from this.

poc code?
Here you are (note I am using a custom RIA domain service to trim the list of modules)

    public class Bootstrapper : UnityBootstrapper
    {
        ModuleCatalog catalog = new ModuleCatalog();
        new public void Run()
        {
            AuthenticationContext ctx = new AuthenticationContext();
            EntityQuery<Module> query = ctx.GetModulesQuery();
            ctx.Load<Module>(query, loadOperation =>
                {
                    if (loadOperation.HasError)
                    {
                        throw new Exception("Not able to load catalog");
                    }
                    foreach (var item in ctx.Modules)
                    {
                        catalog.AddModule(new ModuleInfo()
                        {
                            InitializationMode = (InitializationMode)Enum.Parse(typeof(InitializationMode), item.InitializationMode, true),
                            ModuleName = item.Name,
                            ModuleType = item.TypeName,
                            Ref = item.Xap
                        });
                    }

                    base.Run();

                },null);
        }
        
        protected override DependencyObject CreateShell()
        {
            Shell shell = Container.Resolve<Shell>();
            Application.Current.RootVisual = shell;
            return shell;
        }

        protected override IModuleCatalog GetModuleCatalog()
        {
            return catalog;
        }
    }