Java 在MVC中,我们在哪里处理权限?在控制器或模型级别?

Java 在MVC中,我们在哪里处理权限?在控制器或模型级别?,java,model-view-controller,Java,Model View Controller,我正在修补java框架并试图理解MVC 考虑这个场景:一个博客应用程序有版主和用户,两者都可以更新帖子。版主的更新会立即保存。用户的更新将排队等待版主批准。在MVC中,我们将逻辑放在哪里来决定是更新还是将更新排队 一种方法是在控制器中(伪代码): 我使用这种方法是对的还是有更好的选择?我知道这是一个很老的问题,但我也有同样的问题,所以这可能会有所帮助: 在我当前的项目中,策略是分层授权检查。这样,检查将在最适合的地方进行: 如果这对数据的一致性很重要,那么在模型中进行检查(非常罕见的情况,需要

我正在修补java框架并试图理解MVC

考虑这个场景:一个博客应用程序有版主和用户,两者都可以更新帖子。版主的更新会立即保存。用户的更新将排队等待版主批准。在MVC中,我们将逻辑放在哪里来决定是更新还是将更新排队

一种方法是在控制器中(伪代码):


我使用这种方法是对的还是有更好的选择?

我知道这是一个很老的问题,但我也有同样的问题,所以这可能会有所帮助:

在我当前的项目中,策略是分层授权检查。这样,检查将在最适合的地方进行:

  • 如果这对数据的一致性很重要,那么在模型中进行检查(非常罕见的情况,需要在API文档中设置!)
  • 大多数检查是在控制器级别进行的,因此大多数检查都在一个地方进行
  • 一些检查是在“视图”中完成的(这意味着它们控制API的JSON输出,这反过来会改变前端的行为)。这是非常罕见的,因为它们主要基于控制器提供的数据,而不是直接查询用户的权限
读了这篇文章后,我想出了这个解决办法。它提供了一个很好的总结,说明了为什么使用控制器是一个好主意,以及替代方案是什么

我选择控制器作为授权检查场所的主要原因是,它允许模型(及其管理的数据)独立于应用程序逻辑(包括授权)

请记住,这完全取决于你想要实现什么。我只是想展示什么对我有用

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.
    }
}