Связь двух таблиц с пользовательской таблицей sfDoctrineGuard (symfony) - PullRequest
0 голосов
/ 02 февраля 2010

Hy,

Я запустил в своем веб-приложении часть, которую пользователи должны пройти проверку для работы с ним. У меня есть две связанные таблицы: «Клиент» и «Предприятие». Первая - это пользователи, которые хотят купить продукт, а вторая - «пользователи», которые хотят продавать продукты.

Какой лучший способ сделать это? Отношение 1: 1 с user_table? Как я могу различить, какой тип пользователя? Поскольку пользовательские типы могут редактировать только некоторую информацию, а предприятие имеет доступ к другим модулям ...

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 03 февраля 2010

Вы можете использовать функцию hasReference() на модели.

например. ваша модель Customer имеет отношение к User вот так:

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

Затем вы можете проверить, относится ли пользователь к типу customer (в контроллере):

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

Чтобы упростить эту задачу, вы можете добавить этот метод в класс myUser:

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

То же самое, конечно, для предприятия.

Даже используя две разные таблицы, вы можете использовать метод hasCredential(), и это самый простой способ, если вы хотите проверить только разрешение.
Если вы хотите получить доступ к определенным атрибутам предприятия и пользователя-клиента, вы также можете объединить оба подхода.

Обновление:

Что ж, если предположить, что у пользователей Клиентов и Предприятия разные разрешения, я бы остановился на подходе групп пользователей. Это лучше подходит для групповой модели sfGuard. Если вы тогда знаете, что пользователь находится в группе Customer, вы знаете, что у пользователя есть ссылка на объект клиента.

Но это, конечно, означает, что вы должны назначить правильную группу новому пользователю для правильной работы.

0 голосов
/ 03 февраля 2010

Ваши таблицы действительно должны быть отдельными?Если нет, вы можете использовать стандартную таблицу sf_guard_user, предоставляемую с плагином sfGuard для обоих типов пользователей, а затем использовать функциональность групп, чтобы назначить пользователя в группу «Клиент» или «Предприятие».* Проверка группы, к которой принадлежит пользователь, позволит вам отобразить (или скрыть) соответствующий контент для этого типа пользователя.Примерно так в вашем действии:

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

или использование переменной $sf_user в вашем представлении / шаблонах.

...