2008-11-14 155 views
4

我最近才开始使用MVC方法的工作,所以我想这是一个容易为你在这里大师:安全和访问控制

我应该把访问控制?

  1. 在某视图中?我不想在模板中有开关和标志以外的任何逻辑,所以听起来像最不可行的选项
  2. 在模型中?每个业务对象是否应该根据谁的要求来决定它将公开哪些数据?
  3. 在控制器中?这就是我现在拥有的地方,但它使得难以保持业务规则的一致性

或者还有其他选择吗?

回答

4

这将取决于您使用的框架,并且该语言将决定您可以使用的许多工具。

从高层次来看,您应该在入口点处配置访问安全性。你应该仔细检查每个级别的访问安全性,这些访问安全性可以被认为是自治的,或者从你的应用程序的多个部分重用(谁知道你的同事的门户使用你的逻辑层检查安全性等)。另一个需要担心的就是数据安全性,它尽可能地接近你的数据(所以,对你的#2来说,是的,但是明白它是独立的)。

这与我喜欢谈论的应用程序逻辑和领域逻辑之间的差异类似。如果有任何特定于某个特定应用程序的逻辑(Web应用程序与Windows服务相比,或者其他),那么应仅在该应用程序中定义该逻辑。如果某些逻辑跨越应用程序之间的边界(可在应用程序之间重用),则它符合领域逻辑,应在您的模型中定义。您的应用程序可以使用域逻辑,但他们不应该拥有它。

0

对于模型(又名数据)安全性,模型将“控制”访问,而控制器将“促进”访问。这提供了独立于控制器的模型重用,并且如果不否定使用该模型的不同控制器所需的通用代码复制,则最小化。

例如汽车,驾驶员和钥匙。 (分别为型号,控制器,API)。凭借非常小的接口(密钥== API),该模型允许或拒绝每个API(密钥卡)的控制器访问。允许不同类型的访问(代客钥匙,所有者钥匙,车主FOB)。使用代客钥匙接口,控制器将无法访问模型的一些数据/功能,如手套箱,行李箱和储气罐。这基本上是基于角色的访问模式,通过识别和分类具有非常小的API /命令表面区域的Controller来实现。

这意味着该模型可以被其他控制器(具有不同驱动程序的汽车)只使用基本身份验证来访问模型(汽车的功能和车厢)的数据。