Класс CrmPermissions представляет собой сущность права доступа в системе Ultralight CRM. Это техническая сущность, которая создается автоматически и используется для управления общими правами доступа к типам сущностей.
App\Models\CrmPermissionscrm_permissionsEntityСущность CrmPermissions предназначена для:
groups()Возвращает связь многие-ко-многим для соединения права доступа с группой пользователей.
Возвращает: Объект связи BelongsToMany
Пример использования:
// Получение всех групп, имеющих это право
$groups = $permission->groups;
// Добавление права к группе
$permission->groups()->attach($groupId);
// Удаление права из группы
$permission->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()Сохраняет изменения в экземпляре сущности.
Сущность CrmPermissions содержит следующие поля:
id — первичный ключ (автоинкремент)access_right — уровень доступа (0 — полный, 1 — чтение, 2 — запрещено)entity_id — идентификатор типа сущностиcreated_at — дата создания (если включены timestamps)updated_at — дата обновления (если включены timestamps)fillable — массив полей, которые могут быть массово присвоены:protected $fillable = [ 'access_right' ];group_permissionsСвязь между группами и правами реализована через таблицу group_permissions со следующей структурой:
| Поле | Тип | Описание |
|---|---|---|
crm_group_id | integer | Идентификатор группы |
crm_permission_id | integer | Идентификатор права |
crm_permissionsgroup_permissions// Создание права доступа к типу "Проект"
$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;
// В методе getEntityAccessRight класса CrmGroup
$permission = $this->permissions()
->where('entity_id', $entityTypeId)
->orderBy('access_right', 'asc')
->first();
| Уровень | Значение | Описание |
|---|---|---|
| 0 | Полный доступ | Разрешено чтение и запись |
| 1 | Только чтение | Разрешено только чтение данных |
| 2 | Доступ запрещен | Полный запрет доступа |
При проверке прав доступа:
// Создаем права для отдела продаж
$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'));
// Запрещаем доступ к настройкам системы для сотрудников
$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'));
Сущность CrmPermissions является важным компонентом системы управления правами доступа в Ultralight CRM. Она обеспечивает эффективную модель разграничения прав на уровне типов сущностей, позволяя реализовать гибкие сценарии авторизации. Благодаря своей простой структуре и интеграции с общей системой прав, сущность эффективно выполняет свою функцию контроля доступа к типам сущностей.