SVSP
TECHNOLOGIES

Документация

Entity

Общее описание

Класс Entity является базовым классом для всех сущностей CRM-системы Ultralight CRM. Это родительский класс, от которого наследуются все типы сущностей в системе, обеспечивая единый интерфейс для работы с различными типами данных.

Основная информация

Назначение

Класс Entity предназначен для:

Методы

initialize(int $id, int $typeId, bool $dnCheckRights = false)

Инициализирует экземпляр сущности с указанными параметрами.

Параметры:

Пример использования:

// Инициализация сущности
$entity = new CrmUser();
$entity->initialize(1, 1);

getField(string $name)

Получает значение поля сущности по его имени.

Параметры:

Возвращает: Значение поля

Пример использования:

// Получение значения поля
$name = $entity->getField('name');
$email = $entity->getField('email');

setField(string $name, $value)

Устанавливает значение поля сущности.

Параметры:

Пример использования:

// Установка значения поля
$entity->setField('name', 'Иван Иванов');
$entity->setField('email', 'ivan@example.com');

// Сохранение изменений
$entity->save();

delete()

Удаляет экземпляр сущности из базы данных.

Пример использования:

// Удаление сущности
$entity->delete();

save()

Сохраняет изменения в экземпляре сущности.

Пример использования:

// Изменение и сохранение сущности
$entity->setField('name', 'Новое имя');
$entity->save();

Свойства

Класс Entity содержит следующие свойства:

Публичные свойства

Защищенные свойства

Приватные свойства

Особенности реализации

Наследование

Класс Entity служит основой для всех сущностей системы. Все конкретные сущности наследуют от него:

// Пример наследования
class CrmUser extends Entity {
protected $table = 'crm_user';
}

class CrmGroup extends Entity {
protected $table = 'crm_group';
}

Trait EntityTrait

Класс использует trait EntityTrait, который предоставляет дополнительную функциональность:

use App\Traits\EntityTrait;

class Entity extends Model {
use EntityTrait;
}

Отключение timestamps

public $timestamps = false;

Свойство timestamps отключено, так как система использует собственную логику управления временем создания и обновления сущностей.

Принципы работы

Инициализация сущности

При создании экземпляра сущности необходимо вызвать метод initialize():

$entity = new CrmUser();
$entity->initialize($id, $typeId);

Это позволяет:

Работа с полями

Для доступа к полям сущности используются методы getField() и setField() вместо прямого доступа к свойствам:

// Правильно
$name = $entity->getField('name');
$entity->setField('name', 'Новое имя');

// Неправильно (может не сработать)
$name = $entity->name;
$entity->name = 'Новое имя';

Права доступа

Система проверяет права доступа при попытке чтения/записи данных:

Практическое использование

Создание новой сущности

// Создание новой сущности через EntityTable
$entity = EntityTable::createEntity(1, [
'name' => 'Иван Иванов',
'email' => 'ivan@example.com',
'password' => bcrypt('secret')
]);

// Инициализация сущности
$user = new CrmUser();
$user->initialize($entity->entityId, 1);

Получение существующей сущности

// Получение сущности через EntityTable
$entities = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 1,
'FILTER' => [['id', '=', 1]]
]);

if (!empty($entities)) {
$user = $entities[0];

// Работа с полями
echo $user->getField('name');
echo $user->getField('email');
}

Обновление сущности

// Обновление полей сущности
$user->setField('name', 'Новое имя');
$user->setField('email', 'newemail@example.com');

// Сохранение изменений
$user->save();

Удаление сущности

// Удаление сущности
$user->delete();

Безопасность

Проверка прав доступа

Система реализует проверку прав на нескольких уровнях:

  1. На уровне EntityTable — при получении сущностей
  2. На уровне CrmAuthorization — при проверке прав
  3. На уровне методов — в методах getFieldsetFieldsavedelete

Уровни доступа

УровеньОписание
0Полный доступ (чтение и запись)
1Только чтение
2Доступ запрещен

Защита от несанкционированного доступа

Рекомендации по использованию

  1. Всегда инициализируйте сущность — вызывайте initialize() после создания экземпляра
  2. Используйте методы для доступа к полям — getField() и setField()
  3. Проверяйте права — перед выполнением операций записи
  4. Не изменяйте базовые свойства — $typeID$entityId$fieldsInfo
  5. Наследуйтесь правильно — устанавливайте $table в наследниках

Заключение

Класс Entity является фундаментальным компонентом архитектуры Ultralight CRM. Он обеспечивает единый интерфейс для работы со всеми типами сущностей, реализует базовую функциональность и интегрируется с системой управления правами доступа. Благодаря своей простой, но эффективной архитектуре, класс позволяет легко расширять систему новыми типами сущностей, сохраняя при этом единый подход к их обработке и безопасности.

SVSP
TECHNOLOGIES
Политика конфиденциальности
Политика конфиденциальности