Данный документ подробно описывает архитектуру и принципы работы системы прав доступа в Certis Platform.
Система прав доступа в Certis Platform построена на основе ролевой модели с группами пользователей. Каждый пользователь может принадлежать одной или нескольким группам, а права доступа настраиваются на уровне групп.
Система использует три уровня доступа:
| Уровень | Значение | Описание |
|---|---|---|
| 0 | Полный доступ | Разрешено чтение и запись |
| 1 | Только чтение | Разрешено только чтение данных |
| 2 | Доступ запрещен | Полный запрет доступа (значение по умолчанию) |
Система прав доступа состоит из нескольких компонентов:
Группы объединяют пользователей и служат контейнерами для прав доступа. Каждая группа имеет:
По умолчанию в системе существуют две группы:
Система поддерживает два типа прав доступа:
Права, применяемые ко всем сущностям определенного типа. Например, можно настроить права доступа ко всем сущностям типа «Проект».
group_permissionsПрава, применяемые к конкретной сущности. Позволяют настроить индивидуальный доступ к отдельным экземплярам.
group_direct_permissionsПроверка прав доступа выполняется автоматически при попытке доступа к сущностям. Механизм работает следующим образом:
При запросе доступа к сущности система последовательно проверяет:
Система использует принцип наименьших привилегий:
Права доступа настраиваются через методы класса CrmGroup:
<?php
addAccessRightForEntity(int $entityTypeId, int $accessRight, int $entityId = null)
Добавляет право доступа для группы.
Параметры:
$entityTypeId — идентификатор типа сущности$accessRight — уровень доступа (0, 1, 2)$entityId — идентификатор конкретной сущности (если null — применяется ко всем сущностям типа)Примеры использования:
<?php
// Дать полный доступ ко всем проектам
$group->addAccessRightForEntity(5, 0);
// Дать права на чтение к конкретному проекту (ID: 10)
$group->addAccessRightForEntity(5, 1, 10);
// Запретить доступ к конкретному клиенту (ID: 15)
$group->addAccessRightForEntity(3, 2, 15);
<?php
getEntityAccessRight(int $entityTypeId, int $entityId = null): int
Получает уровень доступа для сущности.
Параметры:
$entityTypeId — идентификатор типа сущности$entityId — идентификатор конкретной сущности (необязательно)Возвращает: Уровень доступа (0, 1, 2)
<?php
deleteDirectRule(int $etid, int $eid)
Удаляет прямое правило доступа.
Параметры:
$etid — идентификатор типа сущности$eid — идентификатор сущности<?php
// Получаем группу "Отдел продаж"
$salesGroup = EntityTable::getEntities([
"ENTITY_TYPE_ID" => 2,
"FILTER" => [["name", "=", "Отдел продаж"]]
])[0];
// Даем полный доступ ко всем клиентам
$salesGroup->addAccessRightForEntity(3, 0); // 3 - тип сущности "Клиент"
// Даем только чтение к финансовым отчетам
$salesGroup->addAccessRightForEntity(7, 1); // 7 - тип сущности "Отчет"
// Запрещаем доступ к настройкам системы
$salesGroup->addAccessRightForEntity(1, 2); // 1 - тип сущности "Пользователь"
<?php
// Даем менеджеру прямой доступ к конфиденциальному проекту
$managerGroup = EntityTable::getEntities([
"ENTITY_TYPE_ID" => 2,
"FILTER" => [["name", "=", "Менеджеры"]]
])[0];
// Полный доступ к конкретному проекту (ID: 100)
$managerGroup->addAccessRightForEntity(5, 0, 100);
Если для сущности не настроены права доступа, доступ к ней запрещен. Это обеспечивает безопасность по умолчанию.
При создании новой сущности права доступа на нее не наследуются автоматически. Необходимо явно настраивать права.
Все изменения прав доступа должны фиксироваться в журнале аудита для отслеживания безопасности.
Система прав доступа Certis Platform обеспечивает гибкое и безопасное управление доступом к данным, позволяя настраивать как общие, так и индивидуальные права для различных групп пользователей.