与sfDoctrineGuard用户表(symfony)的两个表关系

时间:2010-02-02 11:20:07

标签: security symfony1 sfguard

HY,

我已经在我的Web应用程序中开始了一个用户需要得到认可才能使用它的部分。我有两个相关的表:客户和企业....第一个是想要购买产品的用户,第二个是想要销售产品的“用户”。

有什么更好的方法呢?与user_table的关系1:1?我如何区分一种用户类型?因为用户类型只能编辑一些信息,企业可以访问另一个模块...

非常感谢。

2 个答案:

答案 0 :(得分:2)

您可以在模型上使用hasReference()功能。

E.g。您的模型Customer与此User有关系:

Customer:
  relations:
    user:
      local: id
      foreignID: id
      foreignAlias: customer

然后,您可以测试用户是否属于客户类型(在控制器中):

$this->getUser()->getGuardUser()->hasReference('customer');

为了简化这一过程,您可以将此方法添加到myUser类:

public function isCustomer() {
    return $this->getGuardUser()->hasReference('customer');
}

同样适用于企业。

即使使用两个不同的表,您也可以使用hasCredential()方法,如果您只想检查权限,这是最简单的方法。
如果您想访问企业和客户用户的某些属性,您也可以结合使用这两种方法。

<强>更新

好吧,假设客户和企业用户拥有不同的权限,我会采用用户组方法。这更适合sfGuard的群组模型。如果您知道用户在组Customer中,则您知道该用户具有对客户对象的引用。

但这当然意味着您必须将正确的组分配给新用户才能正常工作。

答案 1 :(得分:0)

你的桌子真的需要分开吗?如果没有,您可以使用sfGuard插件随附的标准sf_guard_user表用于两种类型的用户,然后使用组功能将用户分配给“客户”组或“企业”组。

检查用户所属的组将允许您显示(或隐藏)该用户类型的相应内容。你的行动中有这样的事情:

if ($this->getUser()->hasCredential("enterprise"))
{
  // code related to Enterprise customers only
}

或在视图/模板中使用$sf_user变量。