2011-01-26 89 views
0

假设您有一个Business Layer,您将用于前端外部Web应用程序以及后端内部应用程序。外部应用程序将始终在会话中包含用户的登录身份/配置文件。后端应用程序仅适用于内部管理员。资源请求验证,服务或业务层的责任?

在您有以下业务层方法SensitiveInfoManager.GetResource(id)的情况下。你可以想象,当外部用户调用这个方法时,你需要进行某种验证,以确保传入的id实际上属于请求它的用户。假设您在数据库中拥有正确的结构,那么您将能够建立从请求用户到他们请求的资源的链接。你也可以想象后端网站管理员应该能够调用相同的方法,但是该用户并不与资源相关联,但是作为内部管理员的定义应该简单地能够请求任何他们想要的资源。

问题是如何以最大限度的重用和最佳的问题分离来实现这一目标?您是否将此验证纳入业务层,在课堂级别设置某种标志,根据消费者是谁来说明“验证我”或“不验证我”。或者,您是否使用Service Layer作为您的业务层的一部分,通过授权请求的资源进行分配。强制前端应用程序通过服务层请求通道请求,后端应用程序可能直接进入Business Layer

+0

我最初的想法是将此添加为服务层。但是你能确定所有请求都通过它吗?如果不将其添加到业务层。将是AOP(面向方面​​编程)的完美人选。 – 2011-01-26 19:57:36

回答

2

我认为服务层是授权过程最自然的地方。

如果您决定将授权功能添加到业务层,那么我将创建一个界面IAuthorizationAuthority,其中包含检查权限的所有功能。我将创建两个实现此接口的类(一个用于外部应用程序,另一个用于管理应用程序)并使用依赖注入库,以便您可以决定应用程序级别应使用哪个实现。