php - Postgres 中的用户权限
问题描述
我需要在我的应用程序中实现访问控制。我需要控制谁可以编辑哪一行的哪些列。
规则的示例可能是:
- 用户只能编辑 TableA 的她自己的行(也只为她插入 rown),它通过 TableB 链接到她(TableB 包含 User 和 TableA 的外键)。
- 用户只能编辑她的个人资料的某些部分,而管理员可以更新其他部分。
我没有要求数据库向我的应用程序提供评估应用程序代码更改可能性所需的所有信息,而是目前正在考虑基于触发器的插入、更新和删除方法。在这种情况下,当不允许操作时会失败的触发器将被挂接到受控表。
- 我会告诉 Postgres 哪个用户现在正在使用本地配置工作。
- 然后我只是简单地运行操作,同时期待失败的可能性。
假设我能够评估 Postgres DB 中的所有权限,我看到了一些积极的方面:
- 如果可以,我不需要在操作前询问数据库。
- 我不会在权限评估中乱扔应用程序。
- 即使不使用适当的模型,我也可以从应用程序的不同部分运行更新,同时保持安全性。
我的问题是:
- 这会成为扩大规模时的瓶颈吗?(它是一个非常传统的基于 Web 的 PHP 应用程序,所以我预计选择比更新多 100 倍。但这会改变从 Web 服务器的评估,这可能比 DB 服务器更容易复制。)
- 是否有一些更好的知名设计实践来实现我想到的这种权限。
解决方案
扩展后,您的数据库可能会充满难以编辑或更改某些内容的触发器。例如,如果您添加额外的列,您应该编辑与表相关的所有过程。
如果我有您的问题,您正在尝试控制 Web 应用程序用户。
我认为更好的方法是在 PHP 端实施限制。例如创建角色,其中包含可能编辑列的数组。如果这是“管理员”,他/她的列表将包含所有列。然后根据角色配置动态创建表单,让用户看到,他/她可以编辑什么。
推荐阅读
- reactjs - Redux 状态正在更新,而无需分派任何操作
- vba - 使用 VBA 将 Word 表复制到 Excel 时出错
- amazon-redshift - 如何防止亚马逊红移中的重复条目
- azure - 任何带有 TTL 的 TCP ping
- java - Java中的匹配规则集
- php - 可以通过 laravel 取消 payapal 支付中的重复流程
- jquery - 动态jQuery代码等于div的高度?
- python-2.7 - 访问 UNC 路径 Python
- amazon-web-services - RDS - 指定可以访问 RDS 实例的 IP 地址
- r - 重复提示标签去除:在 R 中导入系统发育树进行比较