For example, if someone tries to move a ticket from the Active column to the Resolved column, which is already full, is there a way to set a "hard" barrier that prevents this action from going through?
Even if a column has reached its WIP limit, you can still move more tickets into the column.
There's no "board rule" you can apply. Microsoft prefers a soft-touch approach as described here
https://learn.microsoft.com/en-us/azure/devops/boards/boards/wip-limits?view=azure-devops#keep-within-wip-limits