如何简单地在后端保护实体?

时间:2019-03-03 06:05:20

标签: database security backend

我想知道是否有一些好的做法,如何在不始终获取根实体的情况下保护后端上的实体。

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

  • 用户:每个人可能有很多replaceAll("[^a-zA-Z0-9]", ""); 或根本没有人。
  • 项目:每个项目都属于一个用户,并且可能有多个项目或根本没有一个项目。
  • 项目:每个项目都属于一个项目,并且可能有很多评论,或者根本没有评论。
  • 评论:每个条目都属于一个条目,或者根本不属于一个条目。

类似经典的东西

project

我想知道如何有效地检查用户是否具有正确的权限,例如删除User --> Project --> Item --> Comment

我的第一个想法是重新加入Project,然后检查用户是否有权修改此Project。

我还考虑了每个实体的大映射表,以防止进行2个联接。但是保持同步似乎很混乱。

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

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

1 个答案:

答案 0 :(得分:3)

和往常一样,“取决于”。

似乎您已简化了需求说明。只是要清楚:

  • 评论恰好属于一项。
  • 一个项目恰好属于一个项目。
  • 一个项目恰好属于一个用户。
  • 用户具有零个或多个项目。
  • 一个项目有零个或多个项目。
  • 一个项目的评论为零或更多。

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

您没有指定记录数,也没有指定“有效”的确切定义,但是我假设您不是在谈论Facebook级别的数据,“有效”是指“快速”。

如果是这样,您的第一个选择-“将注释添加到项目,将项目添加到项目,将项目添加到用户”可能非常快-关系数据库确实擅长连接。它不会重复数据,因此维护很简单。

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

选项3很有道理;您还可以查看图形数据库。

但是,还有一些用于管理权限的标准模型可能更有用。正如您提到的Spring Spring Security supports a rich permissions system。也有一些alternatives

相关问题