Класс CrmDirectPermissions представляет собой сущность прямого права доступа в системе Ultralight CRM. Это техническая сущность, которая создается автоматически и используется для управления доступом к конкретным экземплярам сущностей.
App\Models\CrmDirectPermissionscrm_direct_permissionsEntityСущность CrmDirectPermissions предназначена для:
groups()Возвращает связь многие-ко-многим для соединения прямого правила доступа с группой пользователей.
Возвращает: Объект связи BelongsToMany
Пример использования:
// Получение всех групп, имеющих прямое право
$groups = $directPermission->groups;
// Добавление права к группе
$directPermission->groups()->attach($groupId);
// Удаление права из группы
$directPermission->groups()->detach($groupId);
Класс наследует все методы от базового класса Entity:
initialize(int $id, int $typeId, bool $dnCheckRights = false)Инициализирует экземпляр сущности с указанными параметрами.
Параметры:
$id — идентификатор экземпляра сущности$typeId — идентификатор типа сущности$dnCheckRights — флаг, указывающий, нужно ли проверять права доступаgetField(string $name)Получает значение поля сущности по его имени.
Параметры:
$name — имя поляВозвращает: Значение поля
setField(string $name, $value)Устанавливает значение поля сущности.
Параметры:
$name — имя поля$value — новое значение поляdelete()Удаляет экземпляр сущности из базы данных.
save()Сохраняет изменения в экземпляре сущности.
Сущность CrmDirectPermissions содержит следующие поля:
id — первичный ключ (автоинкремент)access_right — уровень доступа (0 — полный, 1 — чтение, 2 — запрещено)entity_type_id — идентификатор типа сущностиentity_id — идентификатор конкретной сущностиcreated_at — дата создания (если включены timestamps)updated_at — дата обновления (если включены timestamps)fillable — массив полей, которые могут быть массово присвоены:protected $fillable = [ 'access_right' ];group_direct_permissionsСвязь между группами и прямыми правами реализована через таблицу group_direct_permissions со следующей структурой:
| Поле | Тип | Описание |
|---|---|---|
crm_group_id | integer | Идентификатор группы |
crm_direct_permission_id | integer | Идентификатор прямого права |
crm_direct_permissionsgroup_direct_permissions// Создание прямого права для конкретной сущности
$directPermission = EntityTable::createEntity(6, [
'entity_type_id' => 5, // Тип сущности "Проект"
'entity_id' => 10, // Конкретный проект с ID=10
'access_right' => 0 // Полный доступ
]);
// Назначение права группе
$directPermission->groups()->attach($groupId);
// Получение всех прямых прав для типа сущности "Проект"
$directPermissions = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 6,
'FILTER' => [['entity_type_id', '=', 5]]
]);
// Получение прямых прав для конкретного проекта
$directPermissions = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 6,
'FILTER' => [
['entity_type_id', '=', 5],
['entity_id', '=', 10]
]
]);
// В методе getEntityAccessRight класса CrmGroup
$dpermission = $this->directPermissions()
->where('entity_id', $entityId)
->where('entity_type_id', $entityTypeId)
->orderBy('access_right', 'asc')
->first();
if (isset($dpermission)) {
$permission = $dpermission;
}
| Уровень | Значение | Описание |
|---|---|---|
| 0 | Полный доступ | Разрешено чтение и запись |
| 1 | Только чтение | Разрешено только чтение данных |
| 2 | Доступ запрещен | Полный запрет доступа |
При проверке прав доступа:
// Создаем прямое право для конфиденциального проекта
$confidentialProject = EntityTable::getEntities([
'ENTITY_TYPE_ID' => 5,
'FILTER' => [['id', '=', 100]]
])[0];
// Даем полный доступ менеджеру (группа с ID=3)
$directPermission = EntityTable::createEntity(6, [
'entity_type_id' => 5,
'entity_id' => 100,
'access_right' => 0
]);
$directPermission->groups()->attach(3);
// Остальные сотрудники имеют только чтение (через общие права)
// Даем временный полный доступ разработчику для отладки
$directPermission = EntityTable::createEntity(6, [
'entity_type_id' => 3, // Тип "Клиент"
'entity_id' => 50, // Конкретный клиент
'access_right' => 0 // Полный доступ
]);
$directPermission->groups()->attach($developerGroupId);
// Через неделю удаляем прямое право
$directPermission->delete();
Сущность CrmDirectPermissions является важным компонентом системы управления правами доступа в Ultralight CRM. Она обеспечивает гибкую модель разграничения прав на уровне отдельных объектов, позволяя реализовать сложные сценарии авторизации. Благодаря своей простой структуре и интеграции с общей системой прав, сущность эффективно выполняет свою функцию контроля доступа к конкретным экземплярам сущностей.