【发布时间】:2010-03-24 09:21:47
【问题描述】:
我正在建立一个基于组/用户的安全系统。
我有4张表如下:
- 用户
- 群组
- group_user_mappings
- acl
其中 acl 是 item_id 与组或用户之间的映射。
按照我完成 acl 表的方式,我有 3 列注释(实际上是第 4 列作为自动 ID,但这无关紧要)
- col 1 item_id(要访问的项目)
- col 3 user_id(允许访问的用户)
- col 3 group_id(允许访问的组)
例如
item1,彼得,,
item2, , group1
项目3,简,,
因此,acl 将授予用户或组访问权限。 ACL 表中的任何一行具有项目 -> 用户映射或项目组。
如果我想要一个返回用户可以访问的所有对象的查询,我想我需要一个带有 UNION 的 SQL 查询,因为我需要 2 个单独的查询,它们像这样连接......
item -> acl -> 组 -> 用户 AND 项目 -> acl -> 用户
我想这可以正常工作。这是它通常的做法吗?我这样做对吗?
看起来有点乱。我想我可以通过为每个人创建一个用户组来解决这个问题,所以我只在我的 SQL 中处理组,但这似乎也有点混乱..
【问题讨论】:
-
我有类似的设置,但不允许为用户分配角色,只分配组,然后将用户分配到组。如果事实证明一个组中只有一个用户,那就这样吧,但这会使整个事情更容易管理。而且,实际上,只有一个用户,您将拥有多少个组?此外,您的设计中没有任何内容可以阻止用户直接或通过组分配给他们的权限。然后,该角色将在您的查询中出现两次;另外,当您想撤销权限时,您必须记住检查直接访问权限和组访问权限。
-
谢谢,我觉得如果这一切变得太难了,我会走这条路:)
标签: sql mysql sql-server