【问题标题】:How to manage user access and user permissions如何管理用户访问和用户权限
【发布时间】:2012-02-07 10:11:54
【问题描述】:

我正在使用 PHP + MySql 开发一个应用程序。在我的应用程序中,我有一个用户表、一个关系表(朋友、关注、订阅)和一个帖子表。用户的主要操作是:

  • 用户有朋友
  • 用户可以发表文章
  • 用户可以查看好友条目
  • 最后用户可以阻止特定朋友查看条目

如果用户 A 是用户 B 的朋友,则用户 A 可以看到来自用户 B 的所有条目。但用户 B 可以限制访问权限,例如仅允许少数几个朋友访问。现在的问题是:如何管理这些权限?我正在考虑一个存储每个被阻止查看特定条目的用户的表格,但是一旦单个用户可以拥有多个朋友,这将不是一个好主意。那么,我该如何解决呢?有人可以告诉我如何开始吗?也许是在 Google 上搜索的正确术语或类似内容的链接。

【问题讨论】:

标签: php mysql user-permissions


【解决方案1】:

你在正确的轨道上。您将要使用链接表。您将从表用户开始。每个用户都有一个 id。然后创建一个表users_friends。该表将包含两个 id,user_id 和friend_id。最后一个表是 users_restricted,它也包含两个 id,user_id 和 restricted_id。

例如

users
user_id name 
1       user1
2       user2
3       user3

users_friends
friend1_id friend2_id
1          2
2          3

这表示用户 1 和 2 是朋友,用户 2 和 3 是朋友。 (这里假设如果用户 1 是用户 2 的朋友,那么用户 2 也是用户 1 的朋友)

users_restricted
user_id restricted_id
1       2

现在即使用户 1 和用户 2 是朋友,但用户 2 在受限列表中意味着不允许用户 2 查看用户 1 的条目。

您可以看到表是通过 id 链接的,并且所有 id 都来自 users 表。这也可以扩展为与条目相关。只需通过 ID 引用条目即可。

要针对特定​​条目阻止用户,您需要以下表格。

entries
entry_id user_id ... other columns holding entry information
1        1
2        1
3        2
4        2

现在用户 1 已输入 2 个条目(条目 1 和条目 2),用户 2 已输入 2 个条目(条目 3 和条目 4)。另一个表将包含这些限制。

entries_restricted
entry_id restricted_user_id
1        2

这表示用户 2 无法查看条目 1。

要让用户 2 可以看到这些条目,您的语句应如下所示。

SELECT e.*, er.entry_id FROM entries e JOIN entries_restricted er ON e.entry_id=er.entry_id WHERE er.restricted_user_id != 2;

该语句选择除限制为用户 2 的条目之外的所有条目信息。

【讨论】:

  • 好的,我知道了。但问题是:用户能够阻止特定条目,而不是所有条目。我该如何处理?
【解决方案2】:

您可以开始使用以下表格。 第一个表是用户表(正如 Jason.Wolfsmith 建议的那样)

users
u_user_id     u_name   
1             user1    
2             user2    
3             user3    

第二张桌子可以这样。

friends_permissions
f_user_id  f_friend_id permission entries
1          2               1        entry1        
2          3               0
1          3               1        entry3

此表将包含应允许查看的条目的权限和名称。 1 - 限制一些条目; 0 - 允许所有。 在 permission 列中,数据类型可能设置为 SET('1','0'),entries 中的数据类型为 NULL。
因此,user1 不允许查看 user2 的 entry1。 (entry1 和 entry3 来自条目表)。

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 2012-12-14
    • 2015-11-28
    • 2018-03-24
    • 2017-11-12
    • 2021-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多