We've covered a lot again in this chapter, some of which was considerably more complicated than previous chapters. However, we are now entirely feature complete!
We started by adding role-based authorization to both our server-side and client-side code. This included adding more advanced route guards to our client-side route definitions, then hiding a number of UI elements if the user wasn't in an appropriate role to view them.
We then started to build out the UI components that were necessary for our admin panel, which for the first time required us to configure nested route definitions. We refactored the order list component to be usable both in the customer's my account page and in our new admin panel. We then built a product list component and created a product form component. While doing so, we discussed the amount of code duplication we currently...