如何仅将数据分配给具有特定角色的用户?

时间:2011-03-05 21:48:41

标签: mysql sql database database-design

如果我有想要分配给具有管理员角色的用户的数据,我将如何在db模式中表示这一点?即我有一个用户表,角色表,user_roles表,这个特定用户链接到一个管理员角色。那么我怎么能只为管理员用户指定信息?

2 个答案:

答案 0 :(得分:1)

EDIT4:所以,如果我理解,你有用户表,角色表和一个将用户与角色联系起来的关联。

一个想法是将值放在角色表中,然后基本上你将有多个管理级别的多个角色。

或者您可以在关联表中创建其他字段,以参数化关联,但这会影响所有其他关联。 (或者你可以:X在B组,其中option1 = 1,option2 = 42,option3 = NULL,并根据组不同地处理选项字段)

其他想法,但我会完全不同:

您将群组视为用户,并使用特殊字段调用isGroup [True / False]。然后创建groupAssociation表,该表存储哪个用户属于哪个组。

示例:

USER
--Id--    --IsGroup--
A         False
B         False
C         True
D         True

GROUPASSOCIATION
--uid--   --BelongsTo--
A          C
B          D
C          D

请注意,您可以级联说C包含在D. 然后创建权限表并将组或用户关联到某些权限。

PRIVILEGE
--Id--    --Name--
1         Access Area 1
2         Access Area 2
3         Modify user
4         Edit on StackOverflow

PRIVILEGEASSOCIATION
--uid--   --pid--
A         4
C         2
D         1
C         3

因此,用户A将拥有所有权限(一个直接,两个来自C组,一个用于D组,因为C包含在D中),B只有一个(来自D组)

你的情况会更好吗?


EDIT3:鉴于你的上一次评论,这已经无效了 GRANT命令将帮助您解决问题。

你可以在那里看到它:GRANT

举个例子:

GRANT SELECT ON db2.invoice TO 'jeffrey'@'localhost';

您只能为列,所有表或所有数据库

执行此操作 编辑:哦,好吧,让我检查一下团队。我忘记了这一部分。

EDIT2:我没有看到关于MySQL中的组权限调整的任何内容:this说它不可能但它已经很老了。但是我来了另一个SO question的accros,他们正在使用PHP来管理这些组。

答案 1 :(得分:1)

我认为OP正试图在数据库中设置一个user_role等于admin角色的字段。如果是这种情况,那么您需要执行以下操作:

UPDATE field FROM users LEFT JOIN user_role ON user.id = userrole.userid 
WHERE userrole.role = 'adminrole'

现在这完全取决于您的架构,请您发帖,以便我们为您提供更准确的SQL命令?

编辑:好的,再次阅读这个问题只会让我感到困惑。请发布您的确切架构。

EDIT2: 在您的示例中,将额外字段存储在users表中是有意义的,因为地址与用户相关。如果users_role等于admin_user,您只想设置此字段。这样,如果您将来需要扩展,也可以提供帮助。如果没有,您还可以定义另一个名为admin_addresses的表。这只会为管理员用户指定,可能如下所示:Admin_address_table(userID,address)。

要强制执行此逻辑(无论哪种方式),您都可以使用例如存储过程。将数据传递给存储过程,如果user_role等于admin_user,它将更新地址字段。或者,您可以在更新数据时使用应用程序逻辑。

这取决于你走哪条路。您可以更好地了解将来可能发生的 以及需要存储的确切信息。希望这会有所帮助。