授予特定用户对特定(多个)文档的访问权限

Posted

技术标签:

【中文标题】授予特定用户对特定(多个)文档的访问权限【英文标题】: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 个视图?

【问题讨论】:

【参考方案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(参考文档)。每次必须向用户授予对文档的访问权限时,都需要填充此表。

【讨论】:

以上是关于授予特定用户对特定(多个)文档的访问权限的主要内容,如果未能解决你的问题,请参考以下文章

S3 存储桶策略授予/限制对特定联合用户的访问权限

Microsoft Graph API - 如何通过 API 向特定用户授予对我的收件箱的访问权限

ASP.NET 登录以授予对特定类型人群的访问权限

仅授予对特定 Azure 存储容器的访问权限

Firebase 规则:动态授予特定用户访问权限

C# 授予对特定不相关类的访问权限