放置授权码的位置

时间:2015-01-29 22:09:34

标签: php design-patterns authorization

我有一个PHP MVC应用程序。业务逻辑在服务层和域模型中实现。我的问题是,我应该在哪里实施授权检查?在服务层?还是域名模型?

在讨论服务层模式http://martinfowler.com/eaaCatalog/serviceLayer.html时,Martin Fowler更喜欢将应用程序逻辑分开。来自商业逻辑'。前者位于服务层,后者位于域对象中。

我的一些授权规则很复杂。授权可以取决于当前用户,他们的角色,许多其他无关对象的状态等。这些似乎属于域对象,或者在某些情况下属于这些对象的工厂。

但在其他情况下,规则很简单。例如,"只有主管可以批准新的布告栏帖子"。在这些情况下,我很想检查服务层中的授权。它避免了安全性要求,并且通过将它们放入(可模拟的)服务层监听器中,我的代码变得更容易测试。

所以,问题是我应该在服务层中放置简单的授权检查,还是在域对象中使用更复杂的授权检查?或者我是通过将它分成两层来寻求麻烦的?

1 个答案:

答案 0 :(得分:0)

好的,所以我将身份验证代码移到了服务层,发现只有几个实例我还需要在模型中进行额外的检查。为了保持一致性,我也可以将这些检查拉到服务层,但代价是性能,但到目前为止我还没有感觉到需要。