首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分离业务逻辑层和安全逻辑层

分离业务逻辑层和安全逻辑层
EN

Stack Overflow用户
提问于 2014-07-15 02:47:08
回答 1查看 519关注 0票数 0

我一直在阅读有关基于声明的身份验证的文章,我知道将身份验证、授权和业务层彼此分开是一种很好的实践。我们应该有一个进行身份验证的组件,一个检查授权的组件,它独立于身份验证器,我们还应该有一个业务逻辑层。除了一部分之外,所有这些都是有意义的。想象一下,如果我们有一个像youtube这样的产品,但用户只能看到他们订阅的人的视频,订阅需要批准。现在,独立的授权组件如何在不访问数据库的情况下决定是否允许获取视频?这不是我们可以提出索赔的东西。唯一的方法是查看所请求的视频id是否在允许的(订阅的)视频中。

我应该将这些检查放在我的授权组件中的业务逻辑或access数据库中吗?

谢谢

EN

回答 1

Stack Overflow用户

发布于 2014-07-15 16:35:33

使用依赖注入原则,授权组件不需要具有对业务数据库的访问权限,只需注入委托“此操作是否已授权”查询的功能。所以在伪代码中;

代码语言:javascript
复制
class Authorization()
{
     public enumCheckAccessResult IsAuthorized(IIdentity userIdentity, ISecurable itemToCheckForAccess IAuthorizationExtension extension)
     {
          enumCheckAccessResult result = checkMyLocalAuthorisationStore(userIdentity, itemToCheckForAccess);
          if(result == enumAccessCheckResult.SecurableNotFound)
          {
               result = extension.CheckExternalAuthorisationStore(userIdentity, itemToCheckForAccess)
          }
     }
}

在我的伪代码中,授权类接受IAuthorizationExtension实例的扩展点(依赖注入),它可以由授权类的任何使用者提供。请注意,只有当我们自己的本地存储无法找到安全对象(即要进行安全检查的项目)时,我们才使用此扩展,因此IAuthorisationExtension的作者无法覆盖我的授权类的决定-如果我的授权类说“访问被拒绝”,我们就不会咨询扩展。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24743604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档