【问题标题】:Two tables relation with sfDoctrineGuard user table (symfony)与 sfDoctrineGuard 用户表(symfony)的两个表关系
【发布时间】:2010-02-02 11:20:06
【问题描述】:

喂,

我已经在我的 Web 应用程序中启动了用户需要经过身份验证才能使用它的部分。我有两个相关的表:Customer 和 Enterprise.... 第一个是想要购买产品的用户,第二个是想要销售产品的“用户”。

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

非常感谢。

【问题讨论】:

    标签: security symfony1 sfguard


    【解决方案1】:

    您可以在模型上使用hasReference() 函数。

    例如你的模型CustomerUser 有这样的关系:

    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 中,则您知道该用户具有对客户对象的引用。

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

    【讨论】:

    • 感谢 felix,我会尝试一下... Felix,另一个问题... 最好按照您说的“创建一个名为 iscustomer 的函数”或与一组用户一起管理它?
    【解决方案2】:

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

    检查用户所属的组将允许您显示(或隐藏)该用户类型的适当内容。在你的行动中是这样的:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多