Skip to content

URL Access Control

Legend: OK = Allowed (200) | 403 = Access Denied

URLEditorReviewerCMS MgrAdminSuper AdminGuest
/admin/assessmentsOKOK403OKOKOK
/admin/protocolsOKOK403OKOK403
/admin/vehicles/*403403403403OK403
/admin/admin/lookups403403403403OK403
/admin/admin/crs403403403403OK403
/admin/users403403403OKOK403
/admin/roles403403403403OK403
/admin/monitoring403403403403OK403
/admin/content/pages403403OKOKOK403
/admin/content/protocols403403OKOKOK403
/admin/content/media403403OKOKOK403
/admin/content/settings403403403OKOK403

The app should distinguish between three scenarios:

ScenarioExpected Response
URL does not existHTTP 404 — “Page Not Found”
URL exists but user lacks permissionHTTP 403 — “Access Denied — You don’t have permission to view this page” with a “Go to Dashboard” button
URL exists, user is not authenticatedHTTP 401 — Redirect to login page

This means:

  • Users cannot distinguish between a non-existent page and a restricted page
  • There’s no clear message explaining they lack permission
  • No sidebar is rendered on the error page
URLExpectedActual
/admin/users403 Access Denied”Page Not Found”
/admin/monitoring403 Access Denied”Page Not Found”
/admin/administration403 Access Denied”Page Not Found”

See FIX-007 — implement a proper 403 page with:

  • Clear “Access Denied” heading
  • Message: “You don’t have permission to view this page”
  • “Go to Dashboard” button
  • Sidebar still rendered for context