我想创建一个方案,用于在社交网站的数据库中存储和访问查看权限。此问题类似于此处的其他问题,例如how are viewing permissions usually implemented in a relational database?和What is the most efficient way to specify user permissions in a database?,但主要有一个显着差异:我没有像这些人那样被迫使用关系数据库是,并且可以四处寻找其他解决方案。我也可以使用缓存来存储我想要的任何类型的预先计算的结构,即使我最终选择了关系解决方案,只要可以合理的方式处理更新。
有几个项目应该共享类似的访问权限设置(照片,状态更新等),这些是我现在想要处理的主要设置:
前两个当然很简单,但最后两个似乎很复杂。当前实现使用带有每个项目标志的关系数据库,如果没有子查询或多个查询,我无法想办法解决它。当然,我可以使用多对多的表将项目与组甚至用户组合在一起,但我担心每次更改都会导致大量更新。
现在,获取实际内容是轻而易举的,但我花了大量时间来检查权限。此外,我可以在一个请求中获得一堆照片,但我需要单独检查查看权限,因为可能适用不同的规则。这个解决方案似乎根本没有扩展。
我还想为特定项目处理特定用户或组的例外情况。除此之外,根据项目类别,可能会有一些情况应该区别对待。例如,您可能希望为照片中标记的用户提供查看该照片的权限(例如,为了抵消cyberbullying)。