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

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
Наверх