【问题标题】:Granting access of specific user to specific (multiple) docs授予特定用户对特定(多个)文档的访问权限
【发布时间】:2011-06-23 08:35:21
【问题描述】:

我正在用数据库构建一个小项目。我有一个用户表,它有两列 user_idname,第二个表存储一些文档的 id 和名称:它也有两列 doc_iddoc_name我想授予特定用户对特定(多个)文档的访问权限。

例如:

user1 只能访问doc_2doc_3

user2只能访问doc_1doc_2等等。

用户和表单不断变化(例如,一段时间后我需要添加一个新文档,并将对现有用户或新用户的访问权限添加到该新文档)。

我需要更改数据库设计吗? (例如在 docs 中添加一列来存储可以访问它的每个用户的名称?)如果是这样,你能告诉我应该做什么更改吗?

是否可以通过创建视图来做到这一点?在这种情况下,我还需要更改数据库设计吗?如果是这种情况,你能告诉我一个示例视图吗?在这种情况下,我需要为每个用户创建视图吗?例如,如果有 100 个用户,我需要创建 100 个视图?

【问题讨论】:

    标签: database database-design views


    【解决方案1】:

    您需要第三张桌子(我称之为user_doc)。您需要 2 个主要列; user_iddoc_id

    然后为每个具有访问权限的文档和用户组合插入一行。

    如果他们的user_id 没有出现在具有相关doc_iduser_doc 表中,则他们没有权限。

    获取特定用户有权访问的所有文档列表的示例查询:

    SELECT doc_id FROM user_doc WHERE user_id = @UserId
    

    或查找所有有权访问特定文档的用户:

    SELECT user_id FROM user_doc WHERE doc_id = @DocId
    

    【讨论】:

    • 您可以使用视图来表示用户及其权限,但您仍然需要创建第三个表并相应地填充它。只有当视图有一些不可靠的数据要表示时,它们才能使用。
    【解决方案2】:

    您需要有一个包含用户和文档之间关系的 PERMISSIONS 表。这些列可以是 PERMISSIONS_ID、USER_ID(参考用户)、DOC_ID(参考文档)。每次必须向用户授予对文档的访问权限时,都需要填充此表。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-10
      • 2016-12-20
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2020-02-17
      • 2017-01-25
      相关资源
      最近更新 更多