Перейти к основному содержимому

Расширение модели пользователя Pimcore

Pimcore не позволяет расширять модель пользователя напрямую. Вместо этого используется механизм создания связи между пользователем и одним или несколькими объектами Pimcore (Data Objects). Этот подход позволяет добавлять любую дополнительную информацию к профилю пользователя или связывать конкретные объекты системы с определенным пользователем.

В данном примере мы рассмотрим, как связать объект member с пользователем Pimcore. На скриншотах показано, как этого можно достичь с помощью внутреннего интерфейса Pimcore. Внизу также приведен пример того, как объекты user и member могут быть созданы и связаны друг с другом программными средствами.

Независимо от способа создания пользователей, первым шагом необходимо определить класс (например, Member) в разделе Settings > Object > Classes (Настройки > Объекты > Классы).

Конфигурация класса Member

В нашем примере класс member содержит три поля: location, name и user. Класс может иметь произвольное количество свойств. Что важно в данном контексте, тип данных User в коде соответствует классу \Pimcore\Model\DataObject\ClassDefinition\Data\User.

При создании объекта класса Member в поле user вы увидите выпадающий список (combo box), в котором можно выбрать любого из существующих пользователей Pimcore.

объект класса Member

В этом примере был выбран пользователь "jondoe".

In the Settings > Users panel this relation is portrayed in the third tab of each user which is called This user is referenced in the following objects: В панели управления пользователями Settings > Users эта связь отображается на третьей вкладке каждого пользователя, которая называется This user is referenced in the following objects:

связи объекта User

Иногда пользователи и объекты создаются автоматически, например, при импорте данных. Ниже приведен пример кода на PHP, который создает нового пользователя, а затем создает объект Member и связывает его с этим пользователем.

use Pimcore\Model\User;  
use Pimcore\Model\DataObject;
...

//создаём нового пользователя для Sydney
$user = User::create([
"parentId" => (int) $userGroup->getId(),
"username" => "sydney",
"password" => "password1234",
"hasCredentials" => true,
"active" => true
]);

...

//создаём объект member для пользователя Sydney
$object = new DataObject\Member();
$object->setCreationDate(time());
$object->setUserOwner($currentUser->getId());
$object->setUserModification($currentUser->getId());
$object->setPublished(true);

$object->setName("Sydney Subsidiary");
$object->setKey("member1234");
//выбираем пользователя, принадлежащего к этому объекту
$object->setUser($user->getId());

$object->setParentId($parentFolderId);
$object->save();

...

Помимо создания этих объектов, может потребоваться выяснить, какие объекты связаны с определенным пользователем. Существует удобный способ найти все объекты, связанные с конкретным пользователем:

$objects = \Pimcore\Model\DataObject\Service::getObjectsReferencingUser($userId);  


Вы можете предложить улучшение документации или задать вопрос в комментариях.
Если вам нужна полноценная консультация — вы можете заказать её на нашем сайте.