Exercise 2: Defense in Depth, Not Redundancy — Possible Solution ==================================================================== WHAT CHANGED IN authorize() ------------------------------ Per this chapter, UpdatePageTitleRequest's authorize() method, which Chapter 8 deliberately left as a visible placeholder returning true, now returns Auth::check() - a real permission decision based on whether a user is currently logged in, rather than an unconditional pass. WHY THE ROUTE MIDDLEWARE AND THE FORMREQUEST CHECK ARE BOTH NEEDED ------------------------------ Per this chapter, the route's own auth middleware and the FormRequest's authorize() check operate as two independent layers rather than one being a copy of the other. The auth middleware protects the route itself - if it were ever accidentally removed from the route definition, or if the route were mistakenly registered outside the protected group, the request would still reach the Controller. The FormRequest's own authorize() check is evaluated independently of how the route was registered, so it still blocks an unauthenticated request with a 403 even if the route-level protection were misconfigured. Each layer covers a failure mode the other doesn't. WHY THIS WORKS AS AN ANSWER ------------------------------ It correctly explains that authorize() now performs a real Auth::check() instead of the Chapter 8 placeholder, and correctly explains why the middleware and the FormRequest check are complementary defense-in-depth layers rather than a duplicated, redundant check.