Где мы обрабатываем разрешения в MVC? На уровне контроллера или модели? - PullRequest
2 голосов
/ 04 октября 2011

Я работаю с Play! java framework и пытаюсь понять 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.
    }
}

AmЯ прав в использовании этого подхода или есть лучшие альтернативы?

1 Ответ

2 голосов
/ 01 октября 2016

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

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...