我需要创建一个多级应用程序,用户详细信息存储在名为Users的mysql表中。多级登录表设计
现在我需要让用户创建子用户或客户帐户。所以会有可以在网站上登录的管理员,用户和客户账户。
我的问题是:我怎么能组管理员和自己创建的子用户和客户端?
我应该创建一个没有管理员细节的第二个表?或者更好地让客户端和用户在同一个管理表中,然后在表上创建一个自我关系?
我需要创建一个多级应用程序,用户详细信息存储在名为Users的mysql表中。多级登录表设计
现在我需要让用户创建子用户或客户帐户。所以会有可以在网站上登录的管理员,用户和客户账户。
我的问题是:我怎么能组管理员和自己创建的子用户和客户端?
我应该创建一个没有管理员细节的第二个表?或者更好地让客户端和用户在同一个管理表中,然后在表上创建一个自我关系?
将所有帐户保留在同一个表中,并添加一个parentAccount
列来存储帐户父级的主键。
只是澄清一点:如果我创建一个管理员,我应该将prent设置为null,或者我应该将父级设置为admin self? – Tropicalista
@ Tropicalista然而你想要做到这一点;我将它设置为空以表示没有父项的帐户。 – Turch
这里或多或少如何我已经做到了过去:
actions
id unsigned int(P)
description varchar(50) // Delete users, Edit something, etc.
roles
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
description varchar(50) // Client Admin, Client User, etc.
roles_actions
id unsigned int(P)
role_id unsigned int(F roles.id)
action_id unsigned int(F actions.id)
site_accounts
id unsigned int(P)
name varchar(50) // Client 1, Client 2, etc.
users
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
username varchar(32)
password varbinary(255)
email varchar(255)
users_roles
id unsigned int(P)
user_id unsigned int(F users.id)
role_id unsigned int(F roles.id)
您将创建“客户端管理员”一role
而这个角色将拥有所有的权限,一个客户端都不可能。然后,只要您注册一个新客户端,您就会创建一个site account
,您将为其分配“客户端管理员”角色。
你需要写,让他们创建代码自己roles
(这将与他们site_account_id关联)也让他们分配任何他们actions
的每一个这些新roles
的。这使他们能够完全控制他们想要的角色以及每个角色拥有的权限。
您还需要编写允许他们添加/更新/删除用户的代码(同样,每个用户都将与其site_account_id关联)。
这使您可以轻松查看哪些角色/用户属于您的每个客户端,只要您丢失了一个,就可以通过简单地删除他们的site_accounts
记录来删除其所有数据。
这只是一个粗略的例子。还有更多的东西可以进入这样的东西,所以你必须弄清楚你想要它是多么细致。
没有绝对正确或错误的解决方案。这完全取决于你在做什么以及最终的细粒度权限。查看访问控制列表(ACL)。 –