To ensure the security of the model (aka data), the model will "control" access, and the controller will "facilitate" access. This ensures reuse of the Model independently of the controller and minimizes, if it does not deny the general replication of the code, necessary for different controllers that use the model.
For example, a car, driver and key. (Model, controller, API, respectively). Due to the very small interface (key == API), the model allows or denies access to the controller for each API (key fob). Different types of access are allowed (Valet key, owner key, FOB owner). Using the Valet key interface, the controller will not have access to some data / functions of the Model, such as the glove compartment, trunk and gas bottle. This is essentially role-based access, implemented by the model by identifying and classifying a controller with a very small API / command surface area.
This means that the Model can be used by other controllers (a car with different drivers) that need only basic authentication to access the model data (functions and compartments of the car).
source share