我需要创建一个多级应用程序,其中用户详细信息存储在名为Users的mysql表中。
现在我需要允许用户创建子用户或客户帐户。因此,将有可以在站点中登录的管理员,用户和客户帐户。
我的问题是:如何对管理员和他自己创建的子用户和客户进行分组?
我应该用非管理员详细信息创建第二个表吗?或者最好将客户端和用户放在同一个admin表中,然后在表上创建自我关系?
答案 0 :(得分:4)
以前我或多或少都是这样做的:
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
{ {1}}。这使他们可以完全控制他们想要的角色以及每个角色拥有的权限。
您还需要编写允许他们添加/更新/删除用户的代码(同样,每个用户都将与他们的site_account_id相关联。)
这使您可以轻松查看哪些角色/用户属于您的每个客户,每当您丢失一个时,您只需删除他们的site_accounts
记录即可删除所有数据。
这只是一个粗略的例子。还有很多东西可以用到这样的东西,所以你必须弄清楚你想要的细粒度。
答案 1 :(得分:1)
将所有帐户保留在同一个表格中,并添加parentAccount
列以存储该帐户父级的主键。