Model view controller 为什么在MVC中,auth通常位于控制器中?
我已经为不同的MVC框架做了很多教程,在控制器中进行授权似乎非常典型。为什么? 我的想法是,控制器应该只用于编排模型操作、处理重定向和处理错误事件。这些都取决于具体的请求。将授权放在控制器中,似乎每当您在不同的控制器操作或不同的控制器中使用相同的模型操作时,都必须复制授权。如果模型中有Auth,则对数据执行操作或状态更改的要求是一致的 我一直在谷歌上搜索和研究其他问题,例如,但我真的不明白为什么这是公认的惯例 将授权置于控制器中而不是模型中,是否有我遗漏的具体原因? 总结评论中的要点:Model view controller 为什么在MVC中,auth通常位于控制器中?,model-view-controller,model,controller,authorization,Model View Controller,Model,Controller,Authorization,我已经为不同的MVC框架做了很多教程,在控制器中进行授权似乎非常典型。为什么? 我的想法是,控制器应该只用于编排模型操作、处理重定向和处理错误事件。这些都取决于具体的请求。将授权放在控制器中,似乎每当您在不同的控制器操作或不同的控制器中使用相同的模型操作时,都必须复制授权。如果模型中有Auth,则对数据执行操作或状态更改的要求是一致的 我一直在谷歌上搜索和研究其他问题,例如,但我真的不明白为什么这是公认的惯例 将授权置于控制器中而不是模型中,是否有我遗漏的具体原因? 总结评论中的要点: 控制器
- 控制器负责更改模型层和当前视图的状态。没有别的了
- 授权属于执行操作的地方,如果您遵循严格的MVC模式,那么这很可能就是模型,控制器当然不负责授权使用模型操作
- cookie应该像对待任何其他数据存储一样:抽象并在模型中使用,而不是直接由控制器使用
- 身份验证和授权是两个独立的问题,尽管它们通常都位于模型层,因为它们通常涉及对数据存储中的值(如cookie)的检查
然后,只有在下一步中,您才应该考虑哪种设计最有利于引入授权和身份验证来满足这些需求。在MVC方法中,您需要将安全性放在以下位置:
最后,一般来说,您希望将非功能性需求/逻辑与功能性需求/逻辑解耦。就像您不实现登录代码,而是使用可配置的框架(如Log4J)或依赖容器进行身份验证(如Apache Tomcat中的HTTP BASIC),您希望使用外部化的授权框架,如Microsoft MVC4世界中基于声明的授权、Java中的Spring Security、Ruby中的CanCan或XACML中的基于声明的授权,与SAML(OASIS)相同主体的标准部分,允许您对任何类型的应用程序和任何层应用授权。我想说的是,it控制器和模型层都不应该与授权检查有关。人们大多将其转储到“控制器”中,因为在使用类似Rails的体系结构时,他们会在“控制器”中转储其他所有内容。我使用的是一个具有授权规则的类,但您实际在哪里执行强制?如果不在控制器或模型中,你在哪里说“要做到这一点,你必须通过这些规则”?嗯。我在你的评论中读到有规则。我想说的是,这些规则应该已经给了你一些指向它们所涉及的东西的指针。@Charles,我想说的是