hasRole() restricts requests to users holding a specified role. Roles are coarse-grained permissions represented internally as GrantedAuthority values. section 7.1.2
Declare roles with the ROLE_ prefix, but pass only the role name to hasRole(). Use hasRole() or hasAnyRole() before falling back to access(). section 7.1.2
Allow administrators only
Configure any request with c -> c.anyRequest().hasRole("ADMIN"). A user with the ADMIN role reaches /hello; a MANAGER receives HTTP 403 Forbidden.
Figure 7.5 Roles are coarse grained. Each user with a specific role can only do the actions granted by that role. When applying this philosophy in authorization, a request is allowed based on the purpose of the user in the system. Only users who have a specific role can call a certain endpoint.
Use the role model when endpoint permissions follow a user's coarse-grained purpose in the system. section 7.1.2

