首页 > 解决方案 > 如何简单地保护后端的实体?

问题描述

我想知道是否有一些好的做法来保护后端的实体,而不需要一直获取根实体。

假设您有一个包含以下实体的应用程序(例如 Spring Boot + MySQL):

经典之类的东西

User --> Project --> Item --> Comment

我想知道如何有效地检查用户是否有权删除Comment.

我的第一个想法是加入到项目中,然后检查用户是否有权修改这个项目。

我还考虑了一个包含每个实体的大映射表,以防止进行 2 次连接。但是保持同步似乎是一团糟。

我的第三个想法是面向文档的数据库可能比经典的 MySQL/MariaDB 更好。

所以我的问题是,是否有任何概念或具体的实现/库/示例如何解决这个问题?

标签: databasesecuritybackend

解决方案


像往常一样,“这取决于”。

看来您已经简化了需求陈述。只是要清楚:

  • 一条评论只属于一项。
  • 一个项目只属于一个项目。
  • 一个项目只属于一个用户。
  • 一个用户有零个或多个项目。
  • 一个项目有零个或多个项目。
  • 一个项目有零个或多个评论。

您要回答的问题是:给定一个项目,根据上面的数据结构,特定用户是否可以访问它?

您没有指定记录的数量或“高效”的精确定义,但我假设您不是在谈论 Facebook 级别的数据,“高效”意味着“快速”。

如果是这种情况,您的第一个选项 - “将评论加入项目,项目加入项目,项目加入用户”可能会非常快 - 关系数据库非常擅长加入。它不重复数据,因此维护简单。

选项 2 - 非规范化为映射表 - 几乎可以肯定是不必要的,并且可能会更慢,因为您必须维护不是免费的映射表。

选项 3 会有意义;您还可以查看图形数据库。

但是,也有一些管理权限的标准模型可能更有用。正如您提到的 Spring,Spring Security 支持丰富的权限系统。也有一些替代方案


推荐阅读