多级登录表设计

时间:2013-06-25 18:19:08

标签: mysql

我需要创建一个多级应用程序,其中用户详细信息存储在名为Users的mysql表中。

现在我需要允许用户创建子用户或客户帐户。因此,将有可以在站点中登录的管理员,用户和客户帐户。

我的问题是:如何对管理员和他自己创建的子用户和客户进行分组?

我应该用非管理员详细信息创建第二个表吗?或者最好将客户端和用户放在同一个admin表中,然后在表上创建自我关系?

2 个答案:

答案 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列以存储该帐户父级的主键。