如何管理用户访问权限和用户权限

时间:2012-01-11 00:53:19

标签: php mysql user-permissions

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

  • 用户有朋友
  • 用户可以发布帖子
  • 用户可以看到朋友条目
  • 最后用户可以阻止查看特定朋友的条目

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

2 个答案:

答案 0 :(得分: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的条目之外的所有条目信息。

答案 1 :(得分:0)

您可以开始使用以下表格。 第一个表是用户表(如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 - 允许所有。 在权限列中,数据类型可能设置为SET('1','0'),条目中的数据类型为NULL。 因此,user1不允许查看entry1到user2。 (entry1和entry3来自条目表)。

相关问题