V16: Adds a state for "forbidden" for entities that return 403 (Access denied)
This pull request introduces enhancements to error handling and user feedback mechanisms in the Umbraco.Web.UI.Client project. Specifically, it improves localization support for error messages across multiple languages, refines the handling of forbidden and not-found states, and adds new UI components to display these states. Below is a breakdown of the most important changes:
Screenshots
📄 Document not found
👤 User group not found (base entity)
How to test
Verify forbidden:
- Create a user in a group that does not have access to certain nodes
- Log in to that user and click on the nodes
- You should see a "forbidden" message
Verify not found:
- Go to any document or entity
- Change the GUID in the URL
- You should see a "not found" message
Changes
Localization Enhancements
- Added localized strings for forbidden and not-found error messages in Danish (
src/assets/lang/da.ts) [1] [2] German (src/assets/lang/de.ts) [3] [4] and English (src/assets/lang/en.ts) [5] [6].
Error Handling Improvements
- Updated
UmbTryExecuteControllerto handle additional HTTP error statuses (400, 401, 403, 404) gracefully without displaying notifications, allowing the UI to manage these errors. (src/packages/core/resources/try-execute/try-execute.controller.ts).
UI Components for Error States
- Introduced a new
umb-route-forbiddencomponent to display a "Forbidden" message for restricted routes. (src/packages/core/router/route/forbidden/route-forbidden.element.ts). - Added
umb-entity-detail-forbiddencomponent to show a "Forbidden" message for restricted entity details. (src/packages/core/workspace/entity-detail/global-components/entity-detail-forbidden.element.ts).
Workspace Context Updates
- Enhanced
UmbEntityDetailWorkspaceContextBaseto manage forbidden states using a newforbiddenstate manager. (src/packages/core/workspace/entity-detail/entity-detail-workspace-base.ts) [1] [2] [3] [4]. - Updated workspace editor components (
entity-detail-workspace-editor.element.tsanddocument-workspace-editor.element.ts) to render forbidden states and adjust routing accordingly. (src/packages/core/workspace/entity-detail/global-components/entity-detail-workspace-editor.element.ts) [1] [2] and (src/packages/documents/documents/workspace/document-workspace-editor.element.ts) [3] [4] [5].
Routing Adjustments
- Exported the new
umb-route-forbiddencomponent in the router index file to integrate with routing logic. (src/packages/core/router/route/index.ts).
Note: One interesting finding is that base entities (those using the base view, such as users, groups, data-types, etc.) handle "not found" - and now also "forbidden" - as Lit states (@state()), whereas documents handle it as routes. There are certain advantages to both; handling it through the router allows us to lazyload those elements from the 'router' package, however, handling it as states is a little easier since we are using Lit anyway. The router is not the most stable way if, say, we forget to remove the forbidden route again.
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-ground-017b08103-19557.westeurope.6.azurestaticapps.net
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-ground-017b08103-19557.westeurope.6.azurestaticapps.net
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-ground-017b08103-19557.westeurope.6.azurestaticapps.net
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-ground-017b08103-19557.westeurope.6.azurestaticapps.net
Azure Static Web Apps: Your stage site is ready! Visit it here: https://victorious-ground-017b08103-19557.westeurope.6.azurestaticapps.net