存储库模式和分层。我在哪里申请保安?

时间:2008-12-09 18:49:30

标签: security repository-pattern separation-of-concerns

我正在尽我所能设计我的网络应用程序,层之间有很好的分离。我正在使用存储库模式,因此有一个SQLObjectRepository,由我的Web服务调用,由我的Web前端调用。

在我的对象模型中,用户与一个或多个区域相关联,这些区域应该过滤他们应该有权访问的对象。我的问题是,当我查询对象时,是否将代码放在服务中以设置对象的权限,或者该代码是否应该存储在存储库中?如果用户是2个区域的成员,我应该将用户作为参数传递给服务,还是应该将用户的区域传递给服务?

1 个答案:

答案 0 :(得分:3)

我会:

  • 编写安全检查,使其可以应用于您喜欢的任何地方。这样,您可以随着需求的变化进行重构。

  • 如果安全检查确实将始终应用,请将其放在存储库层中(或者更好,如果您的语言支持它,则在一个方面),以便多个服务将共享共同的安全性如果他们使用相同的存储库。否则将其置于服务中(或作为服务的一个方面)。

  • 将整个用户对象传递给安全检查机制:

    • 如果安全检查后来变得更复杂(取决于用户的其他属性),API将不会更改;
    • 它更具语义意义 - 您正在检查用户是否有权做某事,而不是国家列表。