如果我有想要分配给具有管理员角色的用户的数据,我将如何在db模式中表示这一点?即我有一个用户表,角色表,user_roles表,这个特定用户链接到一个管理员角色。那么我怎么能只为管理员用户指定信息?
答案 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,它将更新地址字段。或者,您可以在更新数据时使用应用程序逻辑。
这取决于你走哪条路。您可以更好地了解将来可能发生的 以及需要存储的确切信息。希望这会有所帮助。