Dash App with multi users and input

Hello! Im slowly planning to deploy my dash app and have some questions, which are more of an architectural/design point of view.

I’ll describe first very briefly the end goal I would want:
Basically I want to have a Dash app for my team where the home page would be an input where the user can enter a path to a directory of csv files, which will then be preprocessed and loaded (Im assuming here that I of course have access to that directory) to multiple dataframes, and the whole app consists of multiple tabs that are created dynamically based on the files that are in the directory (their content also depends on the dataframes, like graphs and tables).

I want to allow multiple users to go on the app and each one inputting their own path and have their dashboard data and layout loaded accordingly.

I have seen the case of the dcc.Store which consists of storing data on the client side and wondered if this was a possible solution and if so is it the best or most appropriate for me ? Or should I use a database (also my dataframes are very little, I have like 50 of them but they are all 10x5 tables)

Another possible problem Ive thought of is also the way the tabs are created which is as follows:

def generate_sub_menus():
    reports = data_manager.get_full_df()
    all_menus = []
    for report in reports:
        tab_links = []
        for tab_page in reports[report]:
            tab_links.append(dbc.NavLink(tab_page, href=f"/{report}/{tab_page}",
                                         id={"type": "nav_link", "report_name": report, "tab_page": tab_page}))
    return all_menus

The navigation is then done as follows

@app.callback(Output("page-content", "children"), [Input("url", "pathname")],
def render_page_content(pathname):
    full_df = data_manager.get_full_df()

    if pathname and pathname.startswith("/"):
        pathname = pathname[1:]

    path_segments = pathname.split('/')

    return tab_page.tab_page_layout(path_segments[0], path_segments[1])

It seems is that if another user tries to load its data and they have the same report_name and tab_name then the url will be overridden I assume.
Also as you can see in the above code snippet, I have a global instance of a class called DataManager that transforms and store the csv to dataframes, which is of course horrible and not suitable for even two users. What would be the best way to deal with this and have, as previously asked, each user get its own data ?
(I must insist that a whole lot is dynamic and use pattern-matching callbacks as the app is basically the same page repeated but with different dataframes)

Please feel free to ask for clarifications if needed! Thank you for your help and time!!