¿Deben realizarse verificaciones de permisos de usuario en el modelo o el controlador? ¿Y quién debe encargarse de las verificaciones de permisos, el objeto Usuario o algún ayudante de UserManagement?
¿Dónde debería pasar?
Comprobación en el controlador:
class MyController {
void performSomeAction() {
if (user.hasRightPermissions()) {
model.someAction();
}
}
...
Tener las comprobaciones en el controlador ayuda a que los modelos sean acciones simples, para que podamos mantener toda la lógica en los controladores.
Comprobación en el modelo:
class MyModel {
void someAction() {
if (user.hasRightPermissions()) {
...
}
}
...
Al poner los controles en el Modelo, complicamos el Modelo, pero también nos aseguramos de no permitir accidentalmente que los usuarios hagan cosas que no deben hacer en el Controlador.
¿Y por quien?
Una vez que nos instalamos en el lugar, ¿quién debería hacer los controles? ¿El usuario?
Class User {
bool hasPermissions(int permissionMask) {
...
}
...
Pero en realidad no es responsabilidad del usuario saber a qué puede acceder, así que ¿quizás alguna clase de ayuda?
Class UserManagement {
bool hasPermissions(User user, int permissionMask) {
...
}
...
Sé que es común hacer una sola pregunta, bueno, una pregunta, pero creo que se pueden responder muy bien juntos.