Класс CrmGroup представляет собой сущность группы пользователей в системе Ultralight CRM. Группы используются для разделения прав доступа пользователей и управления доступом к различным сущностям системы.
App\Models\CrmGroupcrm_groupEntityСущность CrmGroup предназначена для:
permissions()Возвращает связь многие-ко-многим для соединения группы пользователей с правами доступа.
Возвращает: Объект связи BelongsToMany
Пример использования:
// Получение всех прав группы
$permissions = $group->permissions;
// Добавление права группе
$group->permissions()->attach($permissionId);
// Удаление права из группы
$group->permissions()->detach($permissionId);
directPermissions()Возвращает связь многие-ко-многим для соединения группы пользователей с прямыми правами доступа.
Возвращает: Объект связи BelongsToMany
Пример использования:
// Получение всех прямых прав группы
$directPermissions = $group->directPermissions;
// Добавление прямого права группе
$group->directPermissions()->attach($directPermissionId);
users()Возвращает связь многие-ко-многим для соединения группы пользователей с пользователями.
Возвращает: Объект связи BelongsToMany
Пример использования:
// Получение всех пользователей группы
$users = $group->users;
// Добавление пользователя в группу
$group->users()->attach($userId);
// Удаление пользователя из группы
$group->users()->detach($userId);
addAccessRightForEntity(int $entityTypeId, int $accessRight, int $entityId = null)Функция добавляет право доступа для типа сущности. Если право уже существует, функция обновляет его.
Параметры:
$entityTypeId — идентификатор типа сущности, для которой добавляется право доступа$accessRight — число, определяющее уровень доступа (0 — полный, 1 — чтение, 2 — запрещено)$entityId — идентификатор сущности, для которой устанавливается прямое право (необязательный)Исключения:
Exception — если тип сущности не существуетЛогика работы:
$entityId не указан:
$accessRight ≠ 2 — создает новое право$entityId указан:
Пример использования:
// Дать полный доступ ко всем проектам
$group->addAccessRightForEntity(5, 0);
// Дать права на чтение к конкретному проекту
$group->addAccessRightForEntity(5, 1, 10);
// Запретить доступ к конкретному клиенту
$group->addAccessRightForEntity(3, 2, 15);
deleteDirectRule(int $etid, int $eid)Удаляет связь группы с прямым правом доступа, после чего запись о праве доступа удаляется из таблицы.
Параметры:
$etid — идентификатор типа сущности$eid — идентификатор сущностиИсключения:
Exception — если тип сущности не существуетЛогика работы:
Пример использования:
// Удалить прямое правило для проекта с ID=10
$group->deleteDirectRule(5, 10);
getEntityAccessRight(int $entityTypeId, int $entityId = null): intФункция возвращает право доступа для типа сущности.
Параметры:
$entityTypeId — идентификатор типа сущности$entityId — идентификатор сущности, для которой устанавливается право (необязательный)Возвращает: Уровень доступа (0 — полный, 1 — чтение, 2 — запрещено)
Логика работы:
$entityId, ищет прямое право для конкретной сущностиПример использования:
// Получить права на все проекты
$accessLevel = $group->getEntityAccessRight(5);
// Получить права на конкретный проект
$accessLevel = $group->getEntityAccessRight(5, 10);
addUserToGroup(int $user)Добавляет пользователя в группу.
Параметры:
$user — идентификатор пользователяЛогика работы:
Пример использования:
// Добавить пользователя с ID=5 в группу
$group->addUserToGroup(5);
Класс наследует все методы от базового класса Entity:
initialize(int $id, int $typeId, bool $dnCheckRights = false)Инициализирует экземпляр сущности с указанными параметрами.
getField(string $name)Получает значение поля сущности по его имени.
setField(string $name, $value)Устанавливает значение поля сущности.
delete()Удаляет экземпляр сущности из базы данных.
save()Сохраняет изменения в экземпляре сущности.
Сущность CrmGroup содержит следующие поля:
id — первичный ключ (автоинкремент)name — название группыcreated_at — дата создания (если включены timestamps)updated_at — дата обновления (если включены timestamps)table — имя таблицы: crm_groupaccessRight — уровень прав доступа по умолчанию: 1 (только чтение)Система использует три уровня доступа:
| Уровень | Описание |
|---|---|
| 0 | Полный доступ (чтение и запись) |
| 1 | Только чтение |
| 2 | Доступ запрещен |
Система поддерживает два типа прав:
group_permissionsaddAccessRightForEntity() без указания $entityIdgroup_direct_permissionsaddAccessRightForEntity() с указанием $entityId// Создание новой группы
$groupId = EntityTable::createEntity(2, [
'name' => 'Отдел продаж'
]);
// Получение группы
$group = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 2,
'FILTER' => [['name', '=', 'Отдел продаж']]
])[0];
// Даем полный доступ ко всем клиентам
$group->addAccessRightForEntity(3, 0); // 3 - тип сущности "Клиент"
// Даем только чтение к финансовым отчетам
$group->addAccessRightForEntity(7, 1); // 7 - тип сущности "Отчет"
// Запрещаем доступ к настройкам системы
$group->addAccessRightForEntity(1, 2); // 1 - тип сущности "Пользователь"
// Добавление пользователей в группу
$group->addUserToGroup(5);
$group->addUserToGroup(8);
$group->addUserToGroup(12);
// Получение всех пользователей группы
$users = $group->users;
// Проверка, находится ли пользователь в группе
$inGroup = $group->users()->wherePivot('crm_user_id', $userId)->exists();
// Даем менеджеру прямой доступ к конфиденциальному проекту
$group->addAccessRightForEntity(5, 0, 100); // 5 - проекты, 100 - ID проекта
// Проверяем права на конкретный проект
$accessLevel = $group->getEntityAccessRight(5, 100);
// Удаляем прямое правило
$group->deleteDirectRule(5, 100);
Если для сущности не настроены права доступа, доступ к ней запрещен. Это обеспечивает безопасность по умолчанию.
При создании новой сущности права доступа на нее не наследуются автоматически. Необходимо явно настраивать права.
Все изменения прав доступа должны фиксироваться в журнале аудита для отслеживания безопасности.
Сущность CrmGroup является ключевым компонентом системы управления доступом в Ultralight CRM. Она обеспечивает гибкую и безопасную модель разграничения прав, позволяя настраивать как общие, так и индивидуальные права для различных групп пользователей. Благодаря своей архитектуре, сущность эффективно выполняет свою функцию управления доступом к данным.