嗨,
我已经在我的 Web 应用程序中开始了用户需要经过身份验证才能使用它的部分。我有两个相关的表:客户和企业......第一个是想要购买产品的用户,第二个是想要销售产品的“用户”。
有什么更好的方法来做到这一点?与 user_table 的关系 1:1?我如何区分一种用户类型?因为用户类型只能编辑一些信息,而企业可以访问其他模块...
非常感谢。
您可以hasReference()
在模型上使用该功能。
例如,您的模型与这样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 的组模型。如果您随后知道用户在 group 中Customer
,则您知道该用户具有对客户对象的引用。
但这当然意味着您必须将正确的组分配给新用户才能正常工作。
你的桌子真的需要分开吗?如果没有,您可以使用随 sfGuard 插件提供的标准 sf_guard_user 表用于两种类型的用户,然后使用组功能将用户分配到“客户”组或“企业”组。
检查用户所属的组将允许您显示(或隐藏)该用户类型的适当内容。在你的行动中是这样的:
if ($this->getUser()->hasCredential("enterprise"))
{
// code related to Enterprise customers only
}
或使用$sf_user
视图/模板中的变量。