Let me see if I can share some experiences and advise next steps.
I'll use your text as a base to reply on each aspect.
1My client is an insurance broker. He has a small number of customers.
- I would consider Toolset Forms to let those customers become WordPress Users on the Website. Toolset Access can then help control these users to let them do and see only what's allowed.
Consult https://toolset.com/documentation/getting-started-with-toolset/publish-content-from-the-front-end/forms-for-registering-users/ and https://toolset.com/documentation/user-guides/access/
2. My client wants to upload documents related to each policy for each customer.
- This will happen in the backend, so likely all that's needed here is a Post Type and fields to upload the documents.
Consult https://toolset.com/documentation/user-guides/using-custom-fields/ for this
3. When a customer signs in, they should see 5 basic folders: Policies, Claims, Correspondence, Accounts and Reports.
- At this point I do not think you need anything dynamic yet.
- You know a limited set of options should be available to click only, (Policies, Claims, Correspondence, Accounts and Reports). Hence you can just add this as HTML to a Content Template for example, assign that to a page, and lead every customer to that page at first.
This will be the same as well if you work with dynamic content, this main dashboard will be created as a static element.
4. If a customer clicks on Policies, they should see a further list of folders such as Engineering or Motor Fleet
- Now here we could have a limited amount of such "policy types" or "claim type" etc, but I assume here you cannot control what's happening: your client may add hundreds of different "types" of policies or claims.
- Hence, I suggest to use a Taxonomy here, with which you can classify each policy, claim or other thing as "engeneering" or "motor fleet" etc.
- This would then allow, to create a View, that displays ALL terms (kind of policy) used for polices, when the user clicks "policies" on the main dashboard.
- Again here, you can design with HTML the output of that, so you get a nice folder-like look, for example, of all those taxonomy terms used for policies.
5. Let's say you then click on such a taxonomy term folder - you can repeat the same game as before, pass a URL parameter to the link clicked and lead to a page with a View that displays all policies posts under that term passed by the URL parameter. You can of course go a step deeper again, and group those by dates (post publish date) by repeating the process of creating a list of date ranges, that lead to a page by passing URL parameters that can be read by the View to filter your posts.
I suggest to consult the Views DOC for nesting Views, and the general DOC here:
https://toolset.com/documentation/user-guides/using-a-child-view-in-a-taxonomy-view-layout/
https://toolset.com/documentation/user-guides/display-lists-of-posts-and-create-custom-searches/
6. What's the best way to go about assigning the documents to a customer?
Since you will need eventually the same document for many users, as you mention, you cannot use the Authorship - that would be the easiest though. So if you can avoid this need at all go without it. However if there is no other possibility I suggest either this approach here https://toolset.com/documentation/post-relationships/how-to-create-custom-searches-and-relationships-for-users/, or eventually a custom code, that allows creating a field populated with users to related to the post. This latter requires custom code we cannot provide, hence I'd go with the suggested documented approach of mimicking the user to a post type as explained in the DOC.
I would suggest to start with that:
determine if it's needed to have different customers on the same documents
If yes, proceed with https://toolset.com/documentation/post-relationships/how-to-create-custom-searches-and-relationships-for-users/
If no, proceed by creating the Post Types you need, and taxonomies associated to it.
Add the fields to the post types, and create a few dummy posts.
We can then work on the Views together with a few examples, if you have an online staging site, or I can instruct you step by step once required.
I enable a private reply in case you want to submit access to a testing site.