Должны ли пользовательские проверки прав доступа выполняться в модели или контроллере? И кто должен обрабатывать проверки разрешений, объект User или какой-либо помощник UserManagement?
Где это должно произойти?
Проверка в контроллере:
class MyController {
void performSomeAction() {
if (user.hasRightPermissions()) {
model.someAction();
}
}
...
Наличие проверок в контроллере помогает сделать модели простыми действиями, поэтому мы можем сохранить всю логику для контроллеров.
Проверка в модели:
class MyModel {
void someAction() {
if (user.hasRightPermissions()) {
...
}
}
...
Помещая проверки в Модель, мы усложняем Модель, но также и не допускаем, чтобы мы случайно не позволяли пользователям делать то, что они не должны делать в Контроллере.
И кем?
Как только мы остановимся на месте, кто должен делать проверки? Пользователь?
Class User {
bool hasPermissions(int permissionMask) {
...
}
...
Но на самом деле не ответственность пользователя знать, что он или она может получить, так что, может быть, какой-нибудь класс помощника?
Class UserManagement {
bool hasPermissions(User user, int permissionMask) {
...
}
...
Я знаю, что обычно задают только один вопрос, ну, в общем, вопрос, но я думаю, что на них можно хорошо ответить вместе.