As verificações de permissão do usuário devem ocorrer no modelo ou no controlador? E quem deve lidar com as verificações de permissão, o objeto Usuário ou algum auxiliar do UserManagement?
Onde isso deveria acontecer?
Verificando no controlador:
class MyController {
void performSomeAction() {
if (user.hasRightPermissions()) {
model.someAction();
}
}
...
A realização de verificações no Controlador ajuda a simplificar as ações dos Modelos, para que possamos manter toda a lógica para os Controladores.
Verificando o modelo:
class MyModel {
void someAction() {
if (user.hasRightPermissions()) {
...
}
}
...
Ao colocar as verificações no Modelo, complicamos o Modelo, mas também garantimos que não permitimos acidentalmente que os usuários façam coisas que não deveriam no Controlador.
E por quem?
Depois de nos estabelecermos no local, quem deve fazer as verificações? O usuário?
Class User {
bool hasPermissions(int permissionMask) {
...
}
...
Mas, na verdade, não é responsabilidade do usuário saber o que ele pode acessar, talvez uma aula auxiliar?
Class UserManagement {
bool hasPermissions(User user, int permissionMask) {
...
}
...
Eu sei que é comum fazer apenas uma pergunta, bem, uma pergunta, mas acho que elas podem ser respondidas muito bem juntas.