In the MVC approach, you need to install protection in the place where:
- it cannot be bypassed
- It can be easily configured, managed and updated.
This applies - essentially - to any architecture / type of application.
In particular, in MVC, imagine that you entered authorization in a view. For example, you decide to control who can approve a transaction by enabling / disabling a button. The user of your submission will not be able to approve the transaction if it is not allowed. Imagine that you expose your controller by API, not by presentation. Approve authorization check now needs to be redefined in the API level.
This example shows that you are better off disconnecting authorization from the view / different endpoints and to a common center point - your controller.
Similarly, if you want to control access to large data sets (for example, medical records), you ideally want to put authorization in the model. This is explained both for performance reasons and for security reasons: you prefer the controller to process less data, and you should always try to protect the source of confidential data as close as possible.
Please note that the simultaneous use of permissions / authorization checks in the view, controller and model can lead to a significant increase in experience. See Authorization in the view as a "security / usability" mechanism, in which the user is only presented with the corresponding menus and widgets on the screen depending on their rights. If they were malicious and knew their way around the user interface to the controller, authorization will still be there.
Finally, generally speaking, you want to separate non-functional requirements / logic from functional requirements / logic. Just as you do not implement logging in your code, but use a custom structure (e.g. Log4J) or rely on a container for authentication (e.g. HTTP BASIC in Apache Tomcat), you want to use an external authorization environment such as authorization on based on the requirements of the world of Microsofct MVC4, Spring Security in Java, CanCan in Ruby or XACML, a standard part of the same body as SAML (OASIS), and which will allow you to apply authorization for any type of application and at any level.