我想创建一个方案,用于在社交网站的数据库中存储和访问查看权限。这个问题与这里的其他问题类似,例如查看权限通常如何在关系数据库中实现?在数据库中指定用户权限的最有效方法是什么?,但主要有一个显着的区别:我不会像这些人那样被迫使用关系数据库,并且可以四处寻找其他解决方案。即使我最终选择了关系解决方案,我也可以使用缓存来存储我想要的任何类型的预先计算的结构,只要可以以合理的方式处理更新。
几个项目应该共享相似的访问权限设置(照片、状态更新等),这些是我现在要处理的主要设置:
- 私人的
- 上市
- 我的朋友可以使用
- 对我朋友的朋友可用
- 可用我的群组
前两个当然很简单,但后两个似乎很复杂。当前的实现使用关系数据库,每个项目都有标志,我想不出没有子查询或多个查询的方法来解决它。当然,我可以使用多对多表将项目与组甚至用户组合在一起,但我担心每次发生任何变化时都会导致大量更新。
现在,获取实际内容是轻而易举的事,但我花了很多时间检查权限。此外,我可以在一个请求中获得一堆照片,但我需要单独检查查看权限,因为可能适用不同的规则。该解决方案似乎根本无法扩展。
我还想为特定项目的特定用户或组处理异常。最重要的是,可能有一些情况应该根据项目类别进行不同的处理。例如,您可能希望授予在照片中被标记的用户查看该照片的权利(例如,为了抵制网络欺凌)。
- 其他人如何解决这个问题?
- 有没有聪明的方法可以使这个工作与关系数据库一起工作?
- 如果应该以类似方式处理许多类别的项目,我可以以 DRY 方式执行此操作吗?
- 我应该研究其他类型的数据库,例如图形数据库或其他什么?在这种情况下对特定软件有什么建议吗?