Hiding a button is not access control. It is a courtesy to the user and nothing more.
Every check that matters should be enforced where the data is read and written, so that a new endpoint or a forgotten condition cannot bypass it.
This costs more early and less forever. It is one of the few architectural decisions we make the same way on almost every project.