Где мы обрабатываем разрешения в MVC? На уровне контроллера или модели?

#java #model-view-controller

#java #model-view-controller

Вопрос:

Я занимаюсь игрой!фреймворк java и попытка понять MVC.

Рассмотрим этот сценарий: в приложении для ведения блога есть модераторы и пользователи, и оба могут обновлять сообщения. Обновления модераторов немедленно сохраняются. Обновления пользователей ставятся в очередь для утверждения модератором. В MVC, где мы помещаем логику, чтобы определить, следует ли обновлять или ставить обновления в очередь?

Один из способов сделать это — в контроллере (псевдокод):

 public void function update() {
    User user = User.find("byEmail");

    if ( user.isModerator() ) {
        post.update( args );
    }
    else {
        // save post in a temporary table where it awaits approval.
    }
}
  

Правильно ли я использую этот подход или есть лучшие альтернативы?

Ответ №1:

Я знаю, что это довольно старый вопрос, но у меня был такой же, так что это может помочь:

В моем текущем проекте политика заключается в том, чтобы распределять проверки авторизации. Таким образом, проверки будут выполняться там, где они подходят лучше всего:

  • если это важно для согласованности данных, проверки выполняются в модели (очень редкие случаи, должны быть указаны в документации API!).
  • большинство проверок выполняется на уровне контроллера, поэтому большинство проверок находятся в одном месте.
  • некоторые проверки выполняются в «Представлении» (это означает, что они управляют выводом JSON API, а это, в свою очередь, изменяет поведение во внешнем интерфейсе). Они довольно редки, поскольку в основном основаны на данных, поступающих с контроллера, а не запрашивают разрешения пользователя напрямую.

Я пришел к этому решению после прочтения этого сообщения. Это дает хорошее представление о том, почему использование контроллера является хорошей идеей, и каковы альтернативы.

Основная причина, по которой я выбрал контроллер в качестве места для проверки авторизации, заключается в том, что он позволяет модели (и данным, которыми она управляет) быть независимыми от логики приложения, которая включает авторизацию.

Пожалуйста, имейте в виду, что это полностью зависит от того, чего вы хотите достичь. Я просто хотел показать, что работает для меня.