SVSP
TECHNOLOGIES

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

CrmGroup

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

Класс CrmGroup представляет собой сущность группы пользователей в системе Ultralight CRM. Группы используются для разделения прав доступа пользователей и управления доступом к различным сущностям системы.

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

Назначение

Сущность 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)

Функция добавляет право доступа для типа сущности. Если право уже существует, функция обновляет его.

Параметры:

Исключения:

Логика работы:

  1. Проверяет существование типа сущности
  2. Если $entityId не указан:
    • Проверяет наличие существующего права
    • Если право существует — обновляет его
    • Если права нет и $accessRight ≠ 2 — создает новое право
  3. Если $entityId указан:
    • Проверяет существование сущности
    • Если право существует — обновляет его
    • Если права нет — создает новое прямое право

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

// Дать полный доступ ко всем проектам
$group->addAccessRightForEntity(5, 0);

// Дать права на чтение к конкретному проекту
$group->addAccessRightForEntity(5, 1, 10);

// Запретить доступ к конкретному клиенту
$group->addAccessRightForEntity(3, 2, 15);

deleteDirectRule(int $etid, int $eid)

Удаляет связь группы с прямым правом доступа, после чего запись о праве доступа удаляется из таблицы.

Параметры:

Исключения:

Логика работы:

  1. Проверяет существование типа сущности
  2. Находит прямое право по типу и идентификатору сущности
  3. Удаляет найденное право

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

// Удалить прямое правило для проекта с ID=10
$group->deleteDirectRule(5, 10);

getEntityAccessRight(int $entityTypeId, int $entityId = null): int

Функция возвращает право доступа для типа сущности.

Параметры:

Возвращает: Уровень доступа (0 — полный, 1 — чтение, 2 — запрещено)

Логика работы:

  1. Проверяет существование типа сущности
  2. Ищет право для типа сущности среди привязанных к группе
  3. Если указан $entityId, ищет прямое право для конкретной сущности
  4. Если найдено прямое право, использует его вместо общего
  5. Возвращает уровень доступа или 2 (запрещено), если право не найдено

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

// Получить права на все проекты
$accessLevel = $group->getEntityAccessRight(5);

// Получить права на конкретный проект
$accessLevel = $group->getEntityAccessRight(5, 10);

addUserToGroup(int $user)

Добавляет пользователя в группу.

Параметры:

Логика работы:

  1. Проверяет, не находится ли пользователь уже в группе
  2. Если пользователь не в группе — добавляет его

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

// Добавить пользователя с ID=5 в группу
$group->addUserToGroup(5);

Наследуемые методы от Entity

Класс наследует все методы от базового класса Entity:

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

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

getField(string $name)

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

setField(string $name, $value)

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

delete()

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

save()

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

Поля сущности

Сущность CrmGroup содержит следующие поля:

Основные поля

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

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

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

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

Механизм работы

Модель прав доступа

Система поддерживает два типа прав:

Общие права

Прямые права

Приоритет прав

  1. Прямые права имеют приоритет над общими правами
  2. Более строгие права (запрещающие доступ) имеют приоритет над разрешающими
  3. Если у пользователя есть доступ через несколько групп, применяется наивысший уровень доступа

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

Создание группы

// Создание новой группы
$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);

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

Правило по умолчанию

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

Проверка при создании

При создании новой сущности права доступа на нее не наследуются автоматически. Необходимо явно настраивать права.

Аудит изменений

Все изменения прав доступа должны фиксироваться в журнале аудита для отслеживания безопасности.

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

  1. Начинайте с минимальных привилегий — предоставляйте только необходимые права
  2. Используйте группы — не настраивайте права на уровне отдельных пользователей
  3. Регулярно аудируйте права — проверяйте актуальность настроек доступа
  4. Документируйте политики — ведите реестр групп и их прав доступа
  5. Используйте прямые права умеренно — они усложняют управление доступом

Заключение

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

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