MVC应用程序中的安全性和访问控制

时间:2008-11-14 20:27:23

标签: security model-view-controller access-control

我最近才开始使用MVC方法,所以我想这对你们大家来说很简单:

我在哪里放置访问控制?

  1. 在视图中?除了我的模板中的开关和标志之外,我不想要任何逻辑,所以这听起来像是最不可行的选项
  2. 在模特中?每个业务对象是否应根据谁的要求决定它将显示哪些数据?
  3. 在控制器中?这就是我现在所拥有的地方,但它很难保持业务规则的一致性
  4. 或者还有其他选择吗?

2 个答案:

答案 0 :(得分:4)

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

从较高级别开始,您应该在入口点配置访问安全性。您应该仔细检查每个级别的访问安全性,这些级别可以被认为是自治的,或者从应用程序的多个部分重用(谁知道安全性是否由您的同事使用逻辑层的门户进行检查等等)。另一件需要担心的事情是数据安全性,它尽可能地接近您的数据(所以,对于您的#2,是的,但要理解它是独立的。)

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

答案 1 :(得分:0)

对于模型(也称为数据)安全性,模型将“控制”访问,并且Controller将“促进”访问。这样可以独立于Controller重用模型,并最小化,如果不能否定使用模型的不同控制器所需的通用代码复制。

例如Car,Driver和Key。 (模型,控制器,API)。凭借非常小的接口(key == API),Model允许或拒绝每个API(密钥卡)的Controller访问。允许不同类型的访问(代客密钥,所有者密钥,所有者FOB)。使用代客键接口,控制器将无法访问模型的某些数据/功能,如手套箱,行李箱和油箱。这实际上是模型通过使用非常小的API /命令表面区域识别和分类控制器来实现的基于角色的访问。

这意味着模型可以被其他控制器(具有不同驱动程序的汽车)使用,只需要基本认证即可访问模型的数据(汽车的功能和隔间)。