我有一个简单的 N:M 关系:
表用户:
- 列号
- 列用户名
- 列 is_superuser(布尔值)
表权限:
- 列号
- 列名
表用户权限:
- 列号
- 外键用户
- 外键权限
我想确保如果用户有“is_superuser=True”,那么他应该通过 N:M Table UserPermission 设置所有可用的权限。
典型操作:
- 更新或插入表“User”:用户设置为“is_superuser”。现在 UserPermission 需要拥有该用户的所有权限
- 一个新的权限被添加到权限表中。现在 UserPermission 需要获取 N 个新行(对于 is_superuser=True 的每个用户)。
如何使用 Postgres 9.6 确保这一点?
子问题(请留言):这个模式有名字吗?
这是个错误。只需加入表格并推断权限即可。
现在我们编写一个交叉连接具有权限的用户的查询,这样我们就可以看到所有用户的权限。然后,我们将所有非超级用户的用户与链接表进行外部连接。我们推断他们
has_permission
是否是is_superuser OR /have entry in linking table/
。这is_superuser
是一个更好的来源:如果我们有那个 bool 集,我们甚至不再关心链接表中的内容。这使您的工作变得简单而高效。您不必使表格保持同步。产品