Why one sheet protection beats many range protections
The UI makes it tempting to select each editable range and click Protect range. That works until someone inserts a row above row 4. The protection stays anchored to the original row numbers; your input cells shift down and are now locked, while the old protected range floats in empty space. You end up chasing a moving target every time the sheet grows.
The correct model is one protection on the entire sheet, then a list of exceptions passed to setUnprotectedRanges(). Those exceptions are Range objects, so they follow the data when rows are inserted, the same way a named range would. One protection to update, not a dozen.