security - 存储库模式和分层。我在哪里应用安全性?

标签 security repository-pattern separation-of-concerns

我正在尽我所能设计我的 web 应用程序,并在层之间进行良好的分离。我正在使用存储库模式,因此有一个 SQLObjectRepository,它由我的 Web 前端调用的 ObjectService 调用。

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

最佳答案

我会:

  • 以可以在您喜欢的任何地方应用的方式编写安全检查。通过这种方式,您可以随着需求的变化进行重构。
  • 如果安全检查确实总是适用,请将其放置在存储库层(或者更好,如果您的语言支持它,则在一个方面),以便多个服务在使用相同存储库时共享共同的安全性。否则将其放在服务中(或作用于服务的方面)。
  • 将整个用户对象传递给安全检查机制:
  • 如果以后安全检查变得更复杂(取决于用户的其他属性),API 不会改变;
  • 它更具语义意义 - 您正在检查用户是否有权做某事,而不是国家列表。
  • 关于security - 存储库模式和分层。我在哪里应用安全性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/353799/

    相关文章:

    c# - Entity Framework 和存储库模式概念上的困难

    c# - 我是否正确使用 DataContext.Dispose() ?

    java 许可证执行,创建激活 key 的算法?

    design-patterns - 什么是聚合根?

    c# - C# 中的可查询性和延迟加载是否模糊了数据访问与业务逻辑的界限?

    javascript - AngularJS 逻辑应该放在 HTML 文件中吗?

    parsing - 领域驱动设计——数据解析属于哪里

    security - 存储和搜索加密数据字段,例如电子邮件

    spring - spring-security 收到空凭据(用户名和密码)时如何创建自定义响应?

    php - 如何处理一个项目中模块的不同登录凭据?