我想知道是否有一些好的做法,如何在不始终获取根实体的情况下保护后端上的实体。
假设您有一个具有以下实体的应用程序(例如Spring Boot + MySQL):
replaceAll("[^a-zA-Z0-9]", "");
或根本没有人。类似经典的东西
project
我想知道如何有效地检查用户是否具有正确的权限,例如删除User --> Project --> Item --> Comment
。
我的第一个想法是重新加入Project,然后检查用户是否有权修改此Project。
我还考虑了每个实体的大映射表,以防止进行2个联接。但是保持同步似乎很混乱。
我的第三种想法是,面向文档的数据库比经典的MySQL / MariaDB更好。
所以我的问题是,是否有解决这个问题的概念或具体的实现/库/示例?
答案 0 :(得分:3)
和往常一样,“取决于”。
似乎您已简化了需求说明。只是要清楚:
您要回答的问题是:给定一个项目,特定用户是否可以基于上述数据结构访问它?
您没有指定记录数,也没有指定“有效”的确切定义,但是我假设您不是在谈论Facebook级别的数据,“有效”是指“快速”。
如果是这样,您的第一个选择-“将注释添加到项目,将项目添加到项目,将项目添加到用户”可能非常快-关系数据库确实擅长连接。它不会重复数据,因此维护很简单。
选项2-对映射表进行非规范化-几乎肯定是不必要的,并且可能会变慢,因为您必须维护不是免费的映射表。
选项3很有道理;您还可以查看图形数据库。
但是,还有一些用于管理权限的标准模型可能更有用。正如您提到的Spring Spring Security supports a rich permissions system。也有一些alternatives。