0

ハイ、

私は自分のWebアプリケーションで、ユーザーがそれを操作するために認証する必要がある部分を開始しました。Customer と Enterprise という 2 つのテーブルが関連付けられています。最初のテーブルは製品を購入したいユーザーで、2 番目のテーブルは製品を販売したい「ユーザー」です。

それを行うより良い方法は何ですか?user_table と 1:1 の関係ですか? 1 つのユーザー タイプを区別するにはどうすればよいですか? ユーザータイプは一部の情報しか編集できず、企業は別のモジュールにアクセスできるため...

どうもありがとう。

4

2 に答える 2

2

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');
}

もちろんエンタープライズでも同じです。

2つの異なるテーブルを使用する場合でもhasCredential()、このメソッドを使用できます。これは、許可を確認するだけの場合に最も簡単な方法です。
企業と顧客ユーザーの特定の属性にアクセスする場合は、両方のアプローチを組み合わせることもできます。

アップデート:

さて、顧客とエンタープライズユーザーが異なる権限を持っていると仮定すると、私はユーザーグループアプローチを使用します。これは、sfGuardのグループモデルにより適しています。次に、ユーザーがグループに属しCustomerていることがわかっている場合は、そのユーザーが顧客オブジェクトへの参照を持っていることがわかります。

ただし、これはもちろん、正しく機能するために適切なグループを新しいユーザーに割り当てる必要があることを意味します。

于 2010-02-02T23:17:44.757 に答える
0

あなたのテーブルは本当に分離する必要がありますか? そうでない場合は、両方のタイプのユーザーに対して sfGuard プラグインで提供される標準の sf_guard_user テーブルを使用し、グループ機能を使用してユーザーを「Customer」グループまたは「Enterprise」グループのいずれかに割り当てることができます。

ユーザーが所属するグループを確認すると、そのユーザー タイプに適したコンテンツを表示 (または非表示) できます。あなたの行動でこのようなもの:

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

または$sf_userビュー/テンプレートで変数を使用します。

于 2010-02-02T22:27:53.747 に答える