假设您有一个Business Layer
,您将用于前端外部Web应用程序以及后端内部应用程序。外部应用程序将始终包含用户在会话中登录的身份/配置文件。后端应用程序仅供内部管理员使用。
在您拥有以下业务层方法SensitiveInfoManager.GetResource(id)的场景中。您可以想象,当外部用户调用此方法时,您需要某种验证以确保传入的ID确实属于请求它的用户。假设您在数据库中拥有正确的结构,您可以在其中建立从请求用户到他们请求的资源的链接。您也可以想象一个后端网站管理员应该能够调用相同的方法,但是该用户与资源无关,但是作为内部管理员的定义应该只是能够请求他们想要的任何资源
问题是如何通过最大限度地重复使用和最佳分离关注来实现这一目标?您是否将此验证合并到业务层中,在类级别设置某种标记,其中“验证我”或“不验证我”取决于消费者是谁。或者,您是否使用Service Layer
来处理业务层,并在获得所请求资源的授权下执行任务。通过服务层强制前端应用程序进行通道请求,后端应用程序可以直接转到Business Layer
吗?
答案 0 :(得分:2)
我认为服务层是授权流程最自然的地方。
如果您决定将授权功能添加到业务层,那么我将创建一个包含检查权限的所有功能的接口IAuthorizationAuthority
。我将创建两个实现此接口的类(一个用于外部应用程序,一个用于管理应用程序)并使用依赖注入库,以便您可以决定应用程序级别应该使用哪个实现。