Answers:
可以有两种类型的安全条件,一种在模型上,另一种在视图上。该视图根据当前用户的权限控制相关元素的显示,但是模型控制对基础数据的访问。只要模型具有所有正确的验证/确认,那么即使缺少视图,也仍然具有安全性。
通常,您必须同时拥有两者,因为视图需要针对不同的级别/角色进行更改。控制器发送了将改变视图的相关数据,但是视图仍然需要对该数据进行某些操作以向正确的用户隐藏/显示内容。
这就是为什么大多数模板框架都有条件元素的原因(Handlebars示例):
{{#if isCurrentUserAdmin}}
....
{{/if}
因此,只要适当的部分在正确的位置,这并不意味着违反。
我会说没有。
但是出于与@rvcoutinho说的原因不同的原因(尽管他引用了维基百科,这使我在思考中感到不对)
我要说的是,给模型的模型应该共享所有相关的安全性问题(这取决于您出于这个原因可能希望使用ViewModel的组合数量),因为您可以为安全性位设置开关。
这允许进行两层安全验证:在UI层,因此对于正常情况颠倒了回发,在服务器层中,对于不良行为者,该模型保留了其内部的安全知识,因此控制器将信息传递给立即将其扔出的模型。
这样的两层安全性是行业中的标准,并且这种方式允许您只需要在两个地方存在安全逻辑,因此这是一个好处,一旦将安全逻辑放入控制器中,就将其放到控制器中, UI和模型中的(模型需要它,因为它是最后一道防线,对于MVC Web应用程序之外的任何使用(例如桌面客户端或任何服务器管理工具)尤其重要)
我会说没有。
通常,这种安全检查将由控制器进行。
从维基百科:
控制器可以将命令发送到其关联的视图,以更改模型的视图表示
而且我认为不应直接在视图中完成。例如,如果通过javascript完成,则可能是一个安全问题(可以禁用javascript并访问优先数据)。
再次,来自维基百科:
视图从模型中请求生成输出表示所需的信息。
这个问题涉及几个问题。
if model.userCanEdit() ... endif
。