SVSP
TECHNOLOGIES

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

CrmPermissions

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

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

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

Назначение

Сущность CrmPermissions предназначена для:

Методы

groups()

Возвращает связь многие-ко-многим для соединения права доступа с группой пользователей.

Возвращает: Объект связи BelongsToMany

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

// Получение всех групп, имеющих это право
$groups = $permission->groups;

// Добавление права к группе
$permission->groups()->attach($groupId);

// Удаление права из группы
$permission->groups()->detach($groupId);

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

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

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

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

Параметры:

getField(string $name)

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

Параметры:

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

setField(string $name, $value)

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

Параметры:

delete()

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

save()

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

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

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

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

Защищенные поля

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

  1. Техническая сущность — не содержит кастомной бизнес-логики, используется исключительно для хранения данных
  2. Интеграция с EntityTrait — использует trait для дополнительной функциональности
  3. Связь многие-ко-многим — реализована через связующую таблицу group_permissions
  4. Автоматическое создание — таблица и сущность создаются автоматически при установке системы

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

Связующая таблица

Связь между группами и правами реализована через таблицу group_permissions со следующей структурой:

ПолеТипОписание
crm_group_idintegerИдентификатор группы
crm_permission_idintegerИдентификатор права

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

  1. При создании права создается запись в таблице crm_permissions
  2. При назначении права группе создается запись в связующей таблице group_permissions
  3. Права применяются ко всем экземплярам определенного типа сущности
  4. При проверке прав система сначала проверяет прямые права, затем общие права

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

Создание общего права

// Создание права доступа к типу "Проект"
$permission = EntityTable::createEntity(3, [
'entity_id' => 5, // Идентификатор типа сущности "Проект"
'access_right' => 0 // Полный доступ
]);

// Назначение права группе
$permission->groups()->attach($groupId);

Получение прав

// Получение всех прав для типа сущности "Проект"
$permissions = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 3,
'FILTER' => [['entity_id', '=', 5]]
]);

// Получение прав для конкретной группы
$group = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 2,
'FILTER' => [['id', '=', $groupId]]
])[0];
$groupPermissions = $group->permissions;

Проверка прав в CrmGroup

// В методе getEntityAccessRight класса CrmGroup
$permission = $this->permissions()
->where('entity_id', $entityTypeId)
->orderBy('access_right', 'asc')
->first();

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

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

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

Механизм проверки

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

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

Примеры сценариев

Сценарий 1: Настройка прав для отдела продаж

// Создаем права для отдела продаж
$salesGroup = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 2,
'FILTER' => [['name', '=', 'Отдел продаж']]
])[0];

// Даем полный доступ ко всем клиентам
$clientPermission = EntityTable::createEntity(3, [
'entity_id' => 3, // Тип "Клиент"
'access_right' => 0 // Полный доступ
]);
$clientPermission->groups()->attach($salesGroup->getField('id'));

// Даем только чтение к финансовым отчетам
$reportPermission = EntityTable::createEntity(3, [
'entity_id' => 7, // Тип "Отчет"
'access_right' => 1 // Только чтение
]);
$reportPermission->groups()->attach($salesGroup->getField('id'));

Сценарий 2: Запрет доступа

// Запрещаем доступ к настройкам системы для сотрудников
$employeeGroup = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 2,
'FILTER' => [['name', '=', 'Сотрудники']]
])[0];

$settingsPermission = EntityTable::createEntity(3, [
'entity_id' => 1, // Тип "Пользователь"
'access_right' => 2 // Доступ запрещен
]);
$settingsPermission->groups()->attach($employeeGroup->getField('id'));

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

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

Заключение

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

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