UserFieldAccess
Описание
Абстрактный класс, определяющий доступные пользователю настройки пользовательских полей
Таблицу настроек смотрите в классе Userfieldtable.
Публичные методы
| Метод | Описание | С версии |
|---|---|---|
public function __construct(int $userId = nul) |
Конструктор. Параметры:
|
|
public static function getInstance(string $moduleId, int $userId = null): UserFieldAccess |
Метод попытается найти наследника для модуля $moduleId, создаст его объект и вернет его. Если наследник не найден, то метод бросит исключение \Bitrix\Main\ObjectNotFoundException.
Параметры:
|
|
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. Параметры:
|
|
public function prepareFilter(array $filter = []): ?array |
Метод вернет фильтр по настройкам пользовательских полей, к которым пользователь имеет доступ. Если пользователь не имеет доступ ни к каким настройкам - вернет null.
Параметры:
|
|
public function canRead(int $id): bool |
Метод вернет true, если пользователь может считать настройки пользовательского поля с идентификатором $id. Параметры:
|
|
public function canAdd(array $field): bool |
Метод вернет true, если пользователь может добавить настройки пользовательского поля с полями $fields. Параметры:
|
|
public function canUpdate(int $id): bool |
Метод вернет true, если пользователь может изменить настройки пользовательского поля с идентификатором $id.
Параметры:
|
|
public function canDelete(int $id): bool |
Метод вернет true, если пользователь может удалить настройки пользовательского поля с идентификатором $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, в которых ограничить доступ к этим полям.