处理存储有关不同数据的多个用户组的最佳方法?

时间:2011-05-12 14:26:06

标签: php mysql authentication cakephp acl

我正在创建一个将使用多种类型用户的Web应用程序(例如管理员,管理员,用户)。每个用户都需要存储关于他们的不同信息,有些信息在每种用户类型中都是相同的(即用户名,密码,电子邮件),而其他用户则不同。

我想知道使用数据库的最佳方法,同时使用ACL& CakePHP中的Auth组件。我看到了两种可能的解决方案:

  1. 有三个表,每个用户类型一个。
  2. 有五张桌子。用户表,组表,然后是包含每个用户类型的额外字段的三个表。
  3. 我看到1的问题是,我不确定CakePHP使用不同的模型获取权限是多么容易,而不是使用组表。所以,我认为第二个解决方案是最简单的设置,也许是维护,但3个额外的表有多少开销?还是有一个我没想过的更好的解决方案?

1 个答案:

答案 0 :(得分:2)

您可以使用以下列创建一个名为userTo User的用户名为user_data的表:

  • ID
  • USER_ID

用户HasMany UserData和UserData属于用户

有关如何设置关系数据的参考,请参阅http://book.cakephp.org/view/1043/hasManyhttp://book.cakephp.org/view/1042/belongsTo

$data = array(
    'UserData' => array(
        'user_id' => 2,
        'key' => 'birthday',
        'value' => 'Oct 6th',
        'type' => 'admin'
    )
);

然后,在控制器中,您可以使用Containable行为获取自定义数据:

$this->set('user', $this->User->find('first', array('conditions' => array('User.id' => 2), 'contain' => array('UserData'))));

在视图中(可能最好使其成为辅助函数)

$birthday = Set::extract('/User/UserData[key=birthday]', $user);
echo $birthday[0]['value'];