【问题标题】:Permissions to view Entries in MySQL Database Front-End查看 MySQL 数据库前端中的条目的权限
【发布时间】:2012-06-30 23:47:01
【问题描述】:

我有一个用于 MySQL 数据库的 PHP/HTML/Javascript 驱动的前端,它为我们的办公室存档不同的文件/论文(一种用于物理文书工作的电子索引)。

用户希望能够对这些条目中的每一个拥有权限;例如,人力资源投诉需要被索引,但不应被数据库的所有用户查看。

用户层次结构是两层的。每个用户都是一个或多个分发列表的成员(类似于电子邮件列表)。当一个文件被索引时,用户选择其他人的权限:例如,他/她可以为示例 HR 投诉选择以下内容:

List           |      Permission
`````````````````````````````````
HR Dept        |      Read/Write

Board Members  |      Read

John Smith     |      Read/Write
Mary Smith     |      Read

并且应该对其他人不可见。现在我尝试了几件事来实现这一点,最近的是一个关系表,它涉及以下内容:

User 1->Many DistributionList // Assoc the user to some lists
Permission 1->Many DistributionList  //Indicates level of permission that the list has
Permission 1->Many User //Indicates level of permission for each user

但是,权限表包含每个文件的每个权限的一行,如果有几千个文件和约 50-60 个列表/用户,这意味着几十万个条目。由于该索引不会经常刷新(可能刷新超过 50 年的文件),因此该数字可能会飙升。更不用说查询有些复杂,而且只需要几百个文件就需要相当长的时间(SQL 请求约 1 秒)。

有没有更有效的方法来创建这种基于用户的东西?是否可以改为让 SQL 本身的用户拥有这些权限并让连接处理这些事情?

tl;dr:使用 PHP、Javascript、HTML 和 PHPMyAdmin 对 MySQL 中的条目设置读/写/不可见权限的最佳方法是什么?

【问题讨论】:

    标签: php mysql permissions


    【解决方案1】:

    如果组不多(最多 64 个),您可以为每个文件使用一组权限(1 个额外的列)。 http://dev.mysql.com/doc/refman/5.0/en/set.html

    因此,每个文件都可以有一列表示它属于哪些组,可以随着系统的增长而扩展。

    如果您想超过 64 列,也可以添加第二列,但这需要更复杂的查询(保持部门分开会有所帮助,HRgroups、Boardgroups 等)

    您还可以为特定用户添加例外或创建另一个组。但正如您所说,每个文件/用户有一个关联条目是您将获得的最佳选择。

    【讨论】:

    • 我曾考虑过使用 SET 值数组,然后使用 WHERE user IN(list),但有人告诉我这是不好的做法,所以我最终没有使用它。出于我的目的,我需要为每个文件条目提供列 UserRead|UserWrite|DeptRead|DeptWrite|ListRead|ListWrite,并在这些列中列出用户/部门/列表 ID。编程要容易得多,但我听说它要慢得多。他们错了吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2013-12-02
    • 2021-04-24
    • 2014-11-14
    • 2018-05-02
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    相关资源
    最近更新 更多