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
, в которых ограничить доступ к этим полям.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.