我正在尝试创建一个小应用程序,它将拥有各种用户组,大约6个。我试图找出创建访问控制模型的最佳方法。以下是一些要求:
这是我通过研究各种不同方法/想法而提出的表格布局。
我的想法是,通过使用这个表结构,我可以运行这样的SQL查询(使用当前登录用户的user_id):
SELECT users.id, users.forename, permissions.name
FROM permissions
INNER JOIN groups_permissions ON permissions.id = groups_permissions.groups_permissions_permissions_id
INNER JOIN groups ON groups_permissions.groups_permissions_groups_id = groups.id
INNER JOIN groups_users ON groups_permissions.groups_permissions_groups_id = groups_users.groups_id
INNER JOIN users ON groups_users.users_id = users.id
WHERE users.id =4
UNION
SELECT users.id, users.forename, permissions.name
FROM permissions
INNER JOIN users_permissions ON permissions.id = users_permissions.users_permissions_permissions_id
INNER JOIN users ON users_permissions.users_permissions_users_id = users.id
WHERE users.id =4
这应该给我一个组合的权限列表,包括所有组和任何用户特定的权限。然后我可以在本地缓存此查询,因此我不需要多次运行它。 (我想如果权限表发生了变化,我会设置某种清除缓存的方法。)
这看起来像是一个合理的计划,还是我忽视的明显消极方面?
由于