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
, в которых ограничить доступ к этим полям.