database - 如何简单地保护后端的实体?
问题描述
我想知道是否有一些好的做法来保护后端的实体,而不需要一直获取根实体。
假设您有一个包含以下实体的应用程序(例如 Spring Boot + MySQL):
- 用户:每个人可能有很多人
project
或根本没有人。 - 项目:每个都属于一个用户,可以有很多项目或根本没有。
- 项目:每个都属于一个项目,可以有很多评论或根本没有评论。
- 评论:每个都属于一个项目或根本不属于一个项目。
经典之类的东西
User --> Project --> Item --> Comment
我想知道如何有效地检查用户是否有权删除Comment
.
我的第一个想法是加入到项目中,然后检查用户是否有权修改这个项目。
我还考虑了一个包含每个实体的大映射表,以防止进行 2 次连接。但是保持同步似乎是一团糟。
我的第三个想法是面向文档的数据库可能比经典的 MySQL/MariaDB 更好。
所以我的问题是,是否有任何概念或具体的实现/库/示例如何解决这个问题?
解决方案
像往常一样,“这取决于”。
看来您已经简化了需求陈述。只是要清楚:
- 一条评论只属于一项。
- 一个项目只属于一个项目。
- 一个项目只属于一个用户。
- 一个用户有零个或多个项目。
- 一个项目有零个或多个项目。
- 一个项目有零个或多个评论。
您要回答的问题是:给定一个项目,根据上面的数据结构,特定用户是否可以访问它?
您没有指定记录的数量或“高效”的精确定义,但我假设您不是在谈论 Facebook 级别的数据,“高效”意味着“快速”。
如果是这种情况,您的第一个选项 - “将评论加入项目,项目加入项目,项目加入用户”可能会非常快 - 关系数据库非常擅长加入。它不重复数据,因此维护简单。
选项 2 - 非规范化为映射表 - 几乎可以肯定是不必要的,并且可能会更慢,因为您必须维护不是免费的映射表。
选项 3 会有意义;您还可以查看图形数据库。
但是,也有一些管理权限的标准模型可能更有用。正如您提到的 Spring,Spring Security 支持丰富的权限系统。也有一些替代方案。
推荐阅读
- java - @ConfigurationProperties 的默认值不存在
- android - 在 Android P 中以有效的方式获取 android.os.SystemProperties
- angular - 角度应用程序中的 Firebase 功能不起作用
- php - 使用 $_GET['value'] 作为指针的动态页面内容
- ajax - 如何检查记录是否存在于laravel中?
- asynchronous - 如何管理 Dialogflow / Api.ai 中的 5 秒响应超时限制?
- webmail - 如何删除网络邮件中任何给定日期之前的电子邮件?
- mongodb - GroupBy 使用 cond 选择字段
- php - 如何从多维数组中获取所有值
- python - 创建具有实际值的虚拟列