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

UserFieldAccess

Описание

Абстрактный класс, определяющий доступные пользователю настройки пользовательских полей

Таблицу настроек смотрите в классе Userfieldtable.

Публичные методы

Метод Описание С версии
public function __construct(int $userId = nul) Конструктор.

Параметры:
  • $userId - идентификатор пользователя, для которого будет определяться доступ. Если не передан, то будет взят идентификатор текущего пользователя
public static function getInstance(string $moduleId, int $userId = null): UserFieldAccess Метод попытается найти наследника для модуля $moduleId, создаст его объект и вернет его. Если наследник не найден, то метод бросит исключение \Bitrix\Main\ObjectNotFoundException.

Параметры:
  • $moduleId - идентификатор модуля
  • $userId - идентификатор пользователя, для которого будет определяться доступ. Если не передан, то будет взят идентификатор текущего пользователя
public function setUserId(int $userId): UserFieldAccess Позволяет указать идентификатор пользователя, для которого будет определяться доступ. Метод вернет $this.
public function getUserId(): int Метод вернет текущий идентификатор пользователя, для которого определяется доступ.
public function getRestrictedTypes(): array Метод возвращает массив запрещенных идентификаторов типов пользовательских полей. По умолчанию возвращает:
[
	'resourcebooking', // available in crm only
	'mail_message', // no way to edit
	'hlblock', // the field is not implemented yet
];
Наследники могут переопределить этот список.
public function canReadWithFilter(array $filter): bool Метод вернет true, если пользователь имеет доступ к полям с учетом фильтра $filter.

Параметры:
  • $filter - массив для фильтрации настроек пользовательских полей
public function prepareFilter(array $filter = []): ?array Метод вернет фильтр по настройкам пользовательских полей, к которым пользователь имеет доступ. Если пользователь не имеет доступ ни к каким настройкам - вернет null.

Параметры:
  • $filter - массив для фильтрации настроек пользовательских полей
public function canRead(int $id): bool Метод вернет true, если пользователь может считать настройки пользовательского поля с идентификатором $id.

Параметры:
  • $id - идентификатор настроек пользовательского поля
public function canAdd(array $field): bool Метод вернет true, если пользователь может добавить настройки пользовательского поля с полями $fields.

Параметры:
  • $fields - набор полей для настроек пользовательского поля
public function canUpdate(int $id): bool Метод вернет true, если пользователь может изменить настройки пользовательского поля с идентификатором $id.

Параметры:
  • $id - идентификатор настроек пользовательского поля
public function canDelete(int $id): bool Метод вернет true, если пользователь может удалить настройки пользовательского поля с идентификатором $id.

Параметры:
  • $id - идентификатор настроек пользовательского поля

Типичное использование

В самом простом варианте доступ к настройкам пользовательских полей ограничивается не на уровне отдельных полей, а на уровне сущностей. Если пользователь имеет доступ к настройкам пользовательских полей одной сущности, он, как правило, имеет доступ ко всем полям этой сущности.

При таком варианте использования в наследнике необходимо определить только один абстрактный метод getAvailableEntityIds.

Этот метод должен вернуть набор кодов сущностей (поле ENTITY_ID), к которым пользователь имеет доступ.

Например, для CRM код этого метода может выглядеть следующим образом:

protected function getAvailableEntityIds(): array
{
	$permissions = \CCrmPerms::GetUserPermissions($this->userId);
	if($permissions->HavePerm('CONFIG', BX_CRM_PERM_CONFIG, 'WRITE'))
	{
		return array_keys(\CCrmFields::GetEntityTypes());    	
	}
    
	return [];
}

Здесь проверяется, что у пользователя есть права на изменение настроек, и если они есть, то дается доступ ко всем сущностям.

Но в CRM есть "системные" поля, доступ к которым должен быть ограничен только чтением (например, поля для печати / подписи у компаний для печати в документах).

Чтобы реализовать такое ограничение, надо переопределить методы canUpdate и canDelete, в которых ограничить доступ к этим полям.



© «Битрикс», 2001-2024, «1С-Битрикс», 2024