Czy kontrola modelu powinna odbywać się w modelu lub kontrolerze? A kto powinien obsługiwać sprawdzanie uprawnień, obiekt użytkownika lub pomocnika UserManagement?
Gdzie to się powinno stać?
Sprawdzanie w kontrolerze:
class MyController {
void performSomeAction() {
if (user.hasRightPermissions()) {
model.someAction();
}
}
...
Kontrola w kontrolerze ułatwia wykonywanie modeli przez proste działania, dzięki czemu możemy zachować całą logikę dla kontrolerów.
Sprawdzanie w modelu:
class MyModel {
void someAction() {
if (user.hasRightPermissions()) {
...
}
}
...
Umieszczając kontrole w modelu, komplikujemy model, ale również upewniamy się, że przypadkowo nie pozwalamy użytkownikom robić rzeczy, których nie powinni robić w kontrolerze.
A przez kogo?
Po osiedleniu się na miejscu, kto powinien przeprowadzać kontrole? Użytkownik?
Class User {
bool hasPermissions(int permissionMask) {
...
}
...
Ale tak naprawdę nie jest obowiązkiem użytkownika wiedzieć, do czego on lub ona może uzyskać dostęp, więc może jakaś klasa pomocnicza?
Class UserManagement {
bool hasPermissions(User user, int permissionMask) {
...
}
...
Wiem, że często zadaje się tylko jedno pytanie, no cóż, ale myślę, że można na nie razem dobrze odpowiedzieć.