2009-07-09 127 views
0

我建立一个用户通知系统网站,涉及2级登记在:管理和客户冲突的用户管理设计

我已经全部用户的注册领域到一个单一的登记表:

uid 
email 
password 
owner 
cid 
admin 

当管理员级用户被插入时,当客户端级别的用户被插入管理员列标记有1

,管理员列是0,则所有者设置为管理员的UID。

管理员级别的用户不能修改客户端用户的密码

客户端级别的用户可以属于多个管理员

多个管理员可以共享相同的客户端级别的用户,以便有可能为其他管理员有客户谁是管理员

问题 当一个管理员用户创建自己的客户端用户,客户端用户可以享受该网站,可能想为管理和设置注册可能相同重复的用户使用相同的EM与不同的密码。如果发生这种情况,客户端将成为管理员,那么管理员是否仍是前一个管理员的客户端存在问题。

实施例: 鲍勃注册为管理员和设置了杰克作为客户端用户。杰克使用该网站并喜欢它。他转身并注册为管理员帐户用户,并将Bob作为其客户用户。

的问题是你有这导致登录冲突2 DIFF密码邮件的

显然,这是一个不好的设计中得到去,可以很容易地用一个唯一的用户名/密码组合解决;然而;我想知道在这种情况下,保留电子邮件地址作为用户名时,社区可能会提供哪些其他建议。

最终目标 我最后这个问题的目标是我试图找出如何社交网站不仅可以管理自己的用户,而且他们如何建立“友谊”为好。

回答

0

最简单的解决方法是在验证用户添加另一层:用户类型。

当在他们的人的日志都带有以下:

  1. 一个下拉与两个用户类型选项mneu(用户,管理员)
  2. 用户名字段
  3. 密码字段

用户只认为是成功进行身份验证时,所有三个领域相匹配的是在数据库中。这样你就可以根据用户类型知道要显示的功能。

1

你为什么不能把上的电子邮件唯一约束?这将确保用户不能使用相同的电子邮件创建多次。

当你创建一个新用户时,你只需要做一个快速的数据库检查电子邮件地址。


SELECT uid from users where email = '$email'; 
if (userexists) { 
//update admin = 1 where uid = $uid; 
} else { 
//insert 
} 

伪代码的appoligies - 我主要是php,你没有提到你的语言。

这当然假设这是一个新的系统,并且你目前没有重复的电子邮件(它不会让你把约束放在如果你这样做)。然而,你可以写一个脚本很容易够得重复

SELECT email, count(*) as dupes FROM users GROUP BY email HAVING dupes > 1;

然后我只想用这个人具有最高水平,删除重复的。

这种方法的好处之一是,您将维护所有者,并且能够跟踪那些现在是管理员并拥有y客户的客户,因此客户y原本是x的结果。

如果根据用户级别有不同的页面我过去所做的就像Ankur所说的那样对于任何一个登录都有一个下拉菜单。但是,我只是检查管理员和管理员的客户端是否为admin == 1 < = 1。

1

有一些差距的要求:

  • 可以在客户端属于多个管理 - 我会认为答案是肯定的
  • 可以管理员修改客户端的信息(密码等。 ) - 我会认为答案是否定的

我想表的设计有一些缺陷

  • 所有者/ ADMI n场起到同样的作用 - 既表明层次
  • 有,如果他们已经被邀请参加一个“客户”或由何人

我推荐两个表无指示: 用户表

  • 用户ID
  • 密码
  • 加入日期

UserRelation

  • 的userid
  • CLIENT_ID
  • CLIENT_ACTIVE(作为客户端处理的人的用户ID)(如果客户接受了邀请)
  • date_invited
  • date_accepted
  • 状态(有效/ not-active)

所以,有一个1到ma在User和UserRelation表之间。您可以确定用户是否是“管理员”(如果他们已接受客户端),用户不必再注册一次以成为客户端,并且用户可以关联。与许多管理员...(还有一些其他的好处)

+0

这些都是一些很好的问题..我会填补上述空白 – phill 2009-07-10 13:24:38