将数据库中的数据显示给特定用户(使用角色?)[关闭]

Posted

技术标签:

【中文标题】将数据库中的数据显示给特定用户(使用角色?)[关闭]【英文标题】:Display data from database to specific users (using roles?) [closed] 【发布时间】:2013-03-24 09:14:50 【问题描述】:

我想向特定用户显示一些数据。我已经做过类似的事情,但不同之处在于角色编号是静态的。例如,我添加了一列并将“1”分配给特定用户,所以我写了 if($role == 1) do something 。这很好,因为它是一个静态数字。通过这种方式,我只向角色 1 的用户显示秘密信息。

现在我添加了一个新功能;管理员可以上传属于某个组的特定用户的信息。组的信息会有所不同。数据存储和检索都很好。那不是我的问题。例如,我想向 A 组中的用户 'a1'、'a2'、'a3' 显示文档 A(这是随机名称,我只是想让你更容易),向用户 'a4' 显示文档 B, 'a7','a35','a40'(属于 B 组)等等。

我知道如何存储/检索文档“A”并将其与用户“a1”、“a2”、“a3”及其组链接...但我不确定如何将每个文档显示给团体。文档 A 只能与一组链接(对于 B、C、D.. 等也是如此)。

TABLES
DOCUMENTS
Number - Title - File
1 - Document A - A.doc
2 - Document B - B.doc

DOC_USERS
Doc N - User N
1 - 10
1 - 15
2 - 7

DOC_GROUPS
Doc N - Group N
1 - 1
2 - 2

不要像以前那样说 if($role == 1)。我需要类似 if ($document == $group) 的东西。 我不能输入“A”或“B”或其他任何内容,因为它不是静态的。

有什么帮助吗?

【问题讨论】:

我们可以看看您的表是如何设置的吗? 没有代码很难理解问题是什么。没有代码,你是在寻求建议,这不适合 SO 我刚刚添加了一个表格。 我没有添加任何代码胡安,因为它工作正常。我知道如何检索值(组 ID、分配 ID、用户 ID)。我只是不明白如何比较它们并将信息限制为特定用户。 【参考方案1】:

我会将这个逻辑移到查询而不是视图中。传入 user_id 作为参数,只返回允许用户查看的记录。看起来您的架构允许您根据您的用户 ID 或通过用户与组的关联授予对文档的权限(表结构中似乎缺少该权限,但您在描述中提到了它)

select documents.*
from documents
     inner join doc_users on documents.number= doc_users.doc
where doc_users.user = ?

Union

select documents.*
from documents
     inner join doc_groups on documents.number= doc_group.doc
     inner join user_groups on user_groups.group = doc_groups.group
where user_groups.user = ?

我确信这个查询可以在没有联合的情况下完成,但这很容易阅读和理解。

【讨论】:

这更有意义!一个非常简单的方法,不知道为什么我试图通过使用角色来做到这一点哈哈。非常感谢

以上是关于将数据库中的数据显示给特定用户(使用角色?)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

用户、角色、权限和特定组 RBAC?

将Redshift架构隐藏到特定用户或仅显示特定架构

最佳用户角色权限数据库设计实践? [关闭]

最佳用户角色权限数据库设计实践? [关闭]

基于角色的数据库设计。作为用户属性或角色特定表的角色

[oracle]Oracle角色管理