Документация для разработчиков
Темная тема

UserPermissions

Права доступа

Права доступа — важный раздел бизнес-логики любого приложения. Публичное API сервиса разработано для решения типовых задач.


Настройки прав доступа

Права доступа в CRM настраиваются на уровне ролей. Роль можно назначить: пользователю, группе, подразделению.

На каждую роль настраиваются конкретные права доступа в разрезе «сущности».

Уровень прав настраивается для каждого права доступа. Уровень прав может быть простым — есть доступ или нет доступа, и более сложным — доступ в зависимости от принадлежности к отделу, в зависимости от текущей роли и так далее.

Права, относящиеся к сущностям CRM, настраиваются в разделе /crm/perms/all/. API прав также поддерживает внешние, с точки зрения интерфейса, сущности:

  • цифровые рабочие места
  • crm формы
  • виджеты на сайт

У этих сущностей есть свои интерфейсы прав и изолированные роли, однако с точки зрения принципов работы и способа хранения все это работает одинаково, и обслуживается сервисом \Bitrix\Crm\Service\UserPermissions.


Сервис \Bitrix\Crm\Service\UserPermissions

Сервис доступен через контейнер сервисов:

$userPermissions = \Bitrix\Crm\Service\Container::getInstance()->getUserPermissions();

По умолчанию сервис работает с правами текущего пользователя. Для использования сервиса в контексте другого пользователя, ID пользователя нужно явно передать в конструктор:

$userPermissions = \Bitrix\Crm\Service\Container::getInstance()->getUserPermissions($userId);

UserPermissions содержит две группы методов: базовые проверки и проверки прав доступа.


Базовые проверки


Метод Описание
$userPermissions->isAdmin(): bool
Является ли пользователь администратором портала
$userPermissions->isCrmAdmin(): bool
Является ли пользователь администратором CRM. Пользователь считается администратором CRM, если его роли выдан доступ «Разрешить изменять настройки»
$userPermissions->isAdminForEntity(int $entityTypeId): bool
  • $entityTypeId — идентификатор типа сущности CRM, относительно которой будет производиться проверка прав;
Является ли пользователь администратором сущности $entityTypeId. Под администрированием подразумевается возможность настройки стадий, полей, отображения карточек и так далее. Этот доступ предоставляется администраторам CRM для сущностей, относящихся к CRM, и администраторам рабочих мест для смарт-процессов в рабочих местах


Проверки прав доступа к сущностям CRM


Каждую группу прав обслуживает отдельный класс. Класс UserPermissions не содержит методов для проверки прав доступа, он отдает зависимые от сущности объекты. Проверкой прав занимаются эти объекты.

Например, для проверки прав доступа к конкретным элементам используется объект \Bitrix\Crm\Service\UserPermissions\EntityPermissions\Item. Получить его можно так:

\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->item()

Далее использовать его методы, для проверки конкретных прав, например доступа на чтение:

\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->item()->canRead(CCrmOwnerType::Lead, 1234);

Доступные объекты


1. getUserPermissions()->item(). Права доступа к конкретным элементам CRM

Содержит методы проверки доступа на чтение, изменение, удаление, добавление конкретных элементов CRM.

Содержит несколько вариантов проверки для удобства использования. Например, для проверки доступа на чтение:


Типовой вариант проверки:
\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->item()->canRead(CCrmOwnerType::Lead, 1234);

Проверка по \Bitrix\Crm\Item:
$item = \Bitrix\Crm\Service\Container::getInstance()->getFactory(CCrmOwnerType::Contact)->getItem(345);
\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->item()->canReadItem($item);

Такой вариант удобно использовать в точках, где уже есть объект $item. Корректно работает в том числе для $item не имеющих id, то есть пока еще не сохраненных в базе данных.


Метод Описание
item()->canRead(int $entityTypeId, int $entityId): bool
Может ли пользователь просматривать элемент $entityId сущности $entityTypeId
item()->canReadItem(\Bitrix\Crm\Item $item): bool
Может ли пользователь просматривать элемент $item. Такой вариант удобно использовать в точках, где уже есть объект $item
item()->canAddItem(\Bitrix\Crm\Item $item): bool
Может ли пользователь создать и сохранить в базу данных элемент $item
item()->canUpdate(int $entityTypeId, int $entityId): bool
Может ли пользователь изменять элемент $entityId сущности $entityTypeId
item()->canUpdateItem(\Bitrix\Crm\Item $item): bool
Может ли пользователь изменять элемент $item. Такой вариант удобно использовать в точках, где уже есть объект $item
item()->canDelete(int $entityTypeId, int $entityId): bool
Может ли пользователь удалить элемент $entityId сущности $entityTypeId
item()->canDeleteItem(\Bitrix\Crm\Item $item): bool
Может ли пользователь удалить элемент $item. Такой вариант удобно использовать в точках, где уже есть объект $item
item()->canImportItem(\Bitrix\Crm\Item $item): bool
Может ли пользователь сохранить в базу данных в процессе импорта элемент $item
item()->canChangeStage(ItemIdentifier $itemIdentifier, string $fromStageId, string $toStageId): bool
Может ли пользователь менять стадию элемента $itemIdentifier со стадии $fromStageId на стадию $toStageId


2. $userPermissions->entityType(). Права доступа к типам сущностей CRM

Содержит методы проверки доступа на чтение, изменение, удаление, добавление определенного типа сущности CRM, например сделок.


Примеры:

Проверка, что у пользователя есть доступ на чтение хотя бы каких-то сделок:

\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->entityType()->canReadItems(CCrmOwnerType::Deal);

Проверка, что у пользователя есть доступ на чтение хотя бы каких-то сделок в определенной воронке :

\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->entityType()->canReadItemsInCategory(CCrmOwnerType::Deal, 1);

Для прав на чтение доступен также специфический метод, проверяющий, что у пользователя есть хоть какой-либо доступ к CRM или рабочему месту:

\Bitrix\Crm\Service\Container::getInstance()->getUserPermissions()->entityType()->canReadSomeItems();

Метод Описание
entityType()->canReadItems(int $entityTypeId): bool
Может ли пользователь просматривать элементы сущности $entityTypeId. Вернет true, если у пользователя есть права на чтение элементов этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на чтение элементов хотя бы в одной воронке
entityType()->canReadItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь просматривать элементы сущности $entityTypeId в воронке $categoryId. Вернет true, если у пользователя есть права на чтение элементов в этой воронке этой сущности
entityType()->canReadSomeItemsInCrm(): bool
Может ли пользователь просматривать хотя бы какие-то элементы каких-то сущностей CRM. Вернет true, если у пользователя есть права на чтение элементов хотя бы одной из сущностей CRM. Можно считать эту проверку ответом на вопрос, есть ли у пользователя доступ в CRM
entityType()->canAddItems(int $entityTypeId): bool
Может ли пользователь создать и сохранить в базу данных элементы сущности $entityTypeId. Вернет true, если у пользователя есть права на добавление элементов этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на добавление элементов хотя бы в одной воронке
entityType()->canAddItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь создать и сохранить в базу данных элементы сущности $entityTypeId в воронке $categoryId. Вернет true, если у пользователя есть права на добавление элементов в этой воронке этой сущности
entityType()->canUpdateItems(int $entityTypeId): bool
Может ли пользователь изменять элементы сущности $entityTypeId. Вернет true, если у пользователя есть права на изменение элементов этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на изменение элементов хотя бы в одной воронке
entityType()->canUpdateItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь изменять элементы сущности $entityTypeId в воронке $categoryId. Вернет true, если у пользователя есть права на изменение элементов в этой воронке этой сущности
entityType()->canDeleteItems(int $entityTypeId): bool
Может ли пользователь удалять элементы сущности $entityTypeId. Вернет true, если у пользователя есть права на удаление элементов этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на удаление элементов хотя бы в одной воронке
entityType()->canDeleteItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь удалять элементы сущности $entityTypeId в воронке $categoryId. Вернет true, если у пользователя есть права на удаление элементов в этой воронке этой сущности
entityType()->canExportItems(int $entityTypeId): bool
Может ли пользователь экспортировать элементы сущности $entityTypeId. Вернет true, если у пользователя есть права на экспорт элементов этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на экспорт элементов хотя бы в одной воронке
entityType()->canExportItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь экспортировать элементы сущности $entityTypeId в воронке $categoryId. Вернет true, если у пользователя есть права на экспорт элементов в этой воронке этой сущности
entityType()->canImportItems(int $entityTypeId): bool
Может ли пользователь импортировать элементы в сущность $entityTypeId. Вернет true, если у пользователя есть права на импорт элементов для этой сущности. Если сущность поддерживает воронки, метод вернет true, если у пользователя есть права на импорт элементов хотя бы в одной воронке
entityType()->canImportItemsInCategory(int $entityTypeId, int $categoryId): bool
Может ли пользователь импортировать элементы в воронку $categoryId сущности $entityTypeId. Вернет true, если у пользователя есть права на импорт элементов в эту воронку этой сущности


3. $userPermissions->category(). Права доступа к воронкам сущностей CRM

Содержит методы проверки прав доступа на добавление, изменение, удаление воронок .


Метод Описание
category()->canAdd(\Bitrix\Crm\Category\Entity\Category $category): bool
Может ли пользователь создать воронку, описываемую объектом $category
category()->canUpdate(\Bitrix\Crm\Category\Entity\Category $category): bool
Может ли пользователь изменить воронку, описываемую объектом $category
category()->canDelete(\Bitrix\Crm\Category\Entity\Category $category): bool
Может ли пользователь удалить воронку, описываемую объектом $category


4. $userPermissions->dynamicType(). Права доступа к смарт-процессам

Содержит методы проверки прав доступа к управлению смарт-процессами.


Метод Описание
dynamicType()->canAdd(?int $automatedSolutionId = null): bool
Может ли пользователь создать и сохранить в базу данных новый смарт-процесс. Если передан $automatedSolutionId, проверяется доступ на добавление в цифровое рабочее место, иначе — в CRM
dynamicType()->canUpdate(int $entityTypeId): bool
Может ли пользователь изменить смарт-процесс $entityTypeId


Миграция с более ранних версий


Начиная с версии crm 25.0.0 поведение сервиса UserPermissions изменилось. Далее приведена информация о соответствии между старыми и новыми методами.


Обратите внимание, что все старые методы в ближайшее время будут окончательно удалены и перестанут работать.


Метод Использование
public function canWriteConfig(): bool
Старая версия:
$userPermissions->canWriteConfig()

Актуальная версия:
$userPermissions->isCrmAdmin()
public function canReadType(int $entityTypeId): bool
Старая версия:
$userPermissions->canReadType(CCrmOwnerType::Deal)

Актуальная версия:
$userPermissions->entityType()->canReadItems(CCrmOwnerType::Deal)
public function canReadTypeInCategory(int $entityTypeId, int $categoryId): bool
Старая версия:
$userPermissions->canReadTypeInCategory(CCrmOwnerType::Deal, 1)

Актуальная версия:
$userPermissions->entityType()->canReadTypeInCategory(CCrmOwnerType::Deal, 1)
public function canAddType(): bool
Старая версия:
$userPermissions->canAddType()

Актуальная версия:
$userPermissions->dynamicType()->canAdd()
public function canUpdateType(): bool
Старая версия:
$userPermissions->canUpdateType()

Актуальная версия:
$userPermissions->dynamicType()->canUpdate()
public function canAddItem(Item $item): bool
Старая версия:
$userPermissions->canAddItem($item)

Актуальная версия:
$userPermissions->item()->canAddItem($item)
public function canUpdateItem(Item $item): bool
Старая версия:
$userPermissions->canUpdateItem($item)

Актуальная версия:
$userPermissions->item()->canUpdateItem($item)
public function canDeleteItem(Item $item): bool
Старая версия:
$userPermissions->canDeleteItem($item)

Актуальная версия:
$userPermissions->item()->canDeleteItem($item)
public function canReadItem(Item $item): bool
Старая версия:
$userPermissions->canReadItem($item)

Актуальная версия:
$userPermissions->item()->canReadItem($item)
public function checkAddPermissions(int $entityTypeId, int $categoryId = 0, ?string $stageId = null): bool
Старая версия (только $entityTypeId):
$userPermissions->checkAddPermissions(CCrmOwnerType::Deal)

Актуальная версия:
$userPermissions->entityType()->canAddItems(CCrmOwnerType::Deal)

Старая версия ($entityTypeId и $categoryId):
$userPermissions->checkAddPermissions(CCrmOwnerType::Deal, 1)

Актуальная версия:
$userPermissions->entityType()->canAddItemsInCategory(CCrmOwnerType::Deal, 1)
public function checkUpdatePermissions(int $entityTypeId, int $id, int $categoryId = 0): bool
Старая версия (только $entityTypeId):
$userPermissions->checkUpdatePermissions(CCrmOwnerType::Deal)

Актуальная версия:
$userPermissions->entityType()->canUpdateItems(CCrmOwnerType::Deal)

Старая версия ($entityTypeId и $categoryId):
$userPermissions->checkUpdatePermissions(CCrmOwnerType::Deal, 0, 1)

Актуальная версия:
$userPermissions->entityType()->canUpdateItemsCategory(CCrmOwnerType::Deal, 1)

Старая версия ($entityTypeId и $id):
$userPermissions->checkUpdatePermissions(CCrmOwnerType::Deal, 2)

Актуальная версия:
$userPermissions->item()->canUpdate(CCrmOwnerType::Deal, 2)
public function checkDeletePermissions(int $entityTypeId, int $id, int $categoryId = 0): bool
Старая версия (только $entityTypeId):
$userPermissions->checkDeletePermissions(CCrmOwnerType::Deal)

Актуальная версия:
$userPermissions->entityType()->canDeleteItems(CCrmOwnerType::Deal)

Старая версия ($entityTypeId и $categoryId):
$userPermissions->checkDeletePermissions(CCrmOwnerType::Deal, 0, 1)

Актуальная версия:
$userPermissions->entityType()->canDeleteItemsCategory(CCrmOwnerType::Deal, 1)

Старая версия ($entityTypeId и $id):
$userPermissions->checkDeletePermissions(CCrmOwnerType::Deal, 2)

Актуальная версия:
$userPermissions->item()->canDelete(CCrmOwnerType::Deal, 2)
public function checkReadPermissions(int $entityTypeId, int $id = 0, int $categoryId = 0): bool
Старая версия (только $entityTypeId):
$userPermissions->checkReadPermissions(CCrmOwnerType::Deal)

Актуальная версия:
$userPermissions->entityType()->canReadItems(CCrmOwnerType::Deal)

Старая версия ($entityTypeId и $categoryId):
$userPermissions->checkReadPermissions(CCrmOwnerType::Deal, 0, 1)

Актуальная версия:
$userPermissions->entityType()->canReadItemsCategory(CCrmOwnerType::Deal, 1)

Старая версия ($entityTypeId и $id):
$userPermissions->checkReadPermissions(CCrmOwnerType::Deal, 2)

Актуальная версия:
$userPermissions->item()->canRead(CCrmOwnerType::Deal, 2)
public function canViewItemsInCategory(Category $category): bool
Старая версия:
$userPermissions->canViewItemsInCategory($category)

Актуальная версия:
$userPermissions->category()->canReadItems($category)
public function canAddCategory(Category $category): bool
Старая версия:
$userPermissions->canAddCategory($category)

Актуальная версия:
$userPermissions->category()->canAdd($category)
public function canUpdateCategory(Category $category): bool
Старая версия:
$userPermissions->canUpdateCategory($category)

Актуальная версия:
$userPermissions->category()->canUpdate($category)
public function canDeleteCategory(Category $category): bool
Старая версия:
$userPermissions->canDeleteCategory($category)

Актуальная версия:
$userPermissions->category()->canDelete($category)
public function filterAvailableForReadingCategories(array $categories): array
Старая версия:
$userPermissions->canDeleteCategory($categories)

Актуальная версия:
$userPermissions->category()->canDelete($categories)
public function getPermissionType(Item $item, string $operationType = self::OPERATION_READ): string
Метод удален
public function prepareItemPermissionAttributes(Item $item): array
Метод удален
public static function getItemPermissionEntityType(Item $item): string
Метод удален. Используйте:
\Bitrix\Crm\Category\PermissionEntityTypeHelper::getPermissionEntityTypeForItem($item)
public static function getPermissionEntityType(int $entityTypeId, int $categoryId = 0): string
Метод удален. Используйте:
(new \Bitrix\Crm\Category\PermissionEntityTypeHelper($entityTypeId))->getPermissionEntityTypeForCategory($categoryId)
public static function getEntityNameByPermissionEntityType(string $permissionEntityType): ?string
Метод удален. Используйте:
\Bitrix\Crm\Category\PermissionEntityTypeHelper::extractEntityAndCategoryFromPermissionEntityType($permissionEntityType)
public function applyAvailableItemsFilter(?array $filter, array $permissionEntityTypes, ?string $operation = self::OPERATION_READ, ?string $primary = 'ID'): array
Метод удален. Используйте: методы фабрики для выборок элементов CRM с учетом прав доступа, например:
\Bitrix\Crm\Service\Container::getInstance()->getFactory(CCrmOwnerType::Deal)->getItemsFilteredByPermissions(['filter' => $filter])
public function getStartStageId(int $entityTypeId, EO_Status_Collection $stages, int $categoryId = 0, string $operation = self::OPERATION_ADD): ?string
Метод удален
public function canReadConfig(): bool
Метод удален. Используйте:
$userPermissions->entityType()->canReadSomeItemsInCrm()
public function getCrmPermissions(): \CCrmPerms
Класс CCrmPerms объявлен устаревшим и будет удален в ближайших обновлениях
© «Битрикс», 2001-2025, «1С-Битрикс», 2025