2013-06-25 74 views
0

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

现在我需要让用户创建子用户或客户帐户。所以会有可以在网站上登录的管理员,用户和客户账户。

我的问题是:我怎么能组管理员和自己创建的子用户和客户端?

我应该创建一个没有管理员细节的第二个表?或者更好地让客户端和用户在同一个管理表中,然后在表上创建一个自我关系?

+2

没有绝对正确或错误的解决方案。这完全取决于你在做什么以及最终的细粒度权限。查看访问控制列表(ACL)。 –

回答

1

将所有帐户保留在同一个表中,并添加一个parentAccount列来存储帐户父级的主键。

+0

只是澄清一点:如果我创建一个管理员,我应该将prent设置为null,或者我应该将父级设置为admin self? – Tropicalista

+0

@ Tropicalista然而你想要做到这一点;我将它设置为空以表示没有父项的帐户。 – Turch

3

这里或多或少如何我已经做到了过去:

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记录来删除其所有数据。

这只是一个粗略的例子。还有更多的东西可以进入这样的东西,所以你必须弄清楚你想要它是多么细致。