2010-02-02 115 views
0

海蘭關係,兩個表sfDoctrineGuard用戶表(symfony的)

我已經在我的web應用程序啓動誰的用戶需要進行autenticated與它合作的一部分。我有兩個相關的表格:客戶和企業......第一個是想要購買產品的用戶,第二個是想要銷售產品的「用戶」。

什麼是更好的方法來做到這一點?與user_table的關係1:1?我怎麼能區分一個用戶類型是什麼?由於用戶類型只能編輯一些信息,企業可以訪問另一個模塊...

非常感謝。

回答

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中,則知道該用戶具有對客戶對象的引用。

但是,這意味着您必須將正確的組分配給新用戶才能正常工作。

+0

謝謝felix我會試試看... Felix,另一個問題...更好的做你所說的「創建一個叫做iscustomer的函數」或者用它來管理它? – nebur85 2010-02-04 21:21:58

+0

是的,我會正確分配。 – nebur85 2010-02-05 14:23:17

0

你的桌子真的需要分開嗎?如果沒有,您可以使用sfGuard插件提供的標準sf_guard_user表格用於這兩種類型的用戶,然後使用組功能將用戶分配給「客戶」組或「企業」組。

檢查用戶所屬的組將允許您顯示(或隱藏)該用戶類型的適當內容。像這樣的事情在你的行動:

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

或視圖/模板使用$sf_user變量。

+0

謝謝richsage,我會試試看。 – nebur85 2010-02-04 21:22:32