Настройка прав доступа

При создании SOAP-сервиса вы можете настроить права доступа на двух уровнях:

При вызове конкретной операции проверка разрешений доступа в SOAP-сервисе будет производиться следующим образом:

  • Если для операции задана группа свойств КонтрольДоступа, то будет выполнена проверка по заранее рассчитанным разрешениям доступа для данной операции. Дальнейшие пункты не выполняются.
  • Если вышеупомянутая группа свойств не задана, то проверяются общие разрешения доступа для SOAP-сервиса, заданные группой свойств КонтрольДоступа SOAP-сервиса.
Важно: Если операция имеет группу свойств КонтрольДоступа и в очередном обновлении вы изменили свойство операции Имя, то нужно обязательно вызвать перерасчет разрешений доступа для этого SOAP-сервиса в обработчике ПриОбновлении в модуле проекта. В противном случае, права доступа для переименованных операций могут работать с ошибкой, так как рассчитанные разрешения доступа хранятся в разрезе имен операций.

Настройка прав доступа для SOAP-сервиса

Чтобы настроить права доступа для вызова SOAP-сервиса в целом, следует в группе свойств SOAP-сервиса КонтрольДоступа задать необходимые настройки прав доступа. Пример YAML-файла:
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ОбластьВидимости: ВПодсистеме
КонтрольДоступа:
    Вызов: РазрешеноАутентифицированным
Данные настройки будут распространяться на все доступные в SOAP-сервисе операции. Если необходимо настроить нестандартный расчет прав доступа, то в группе свойств КонтрольДоступа вы можете указать значение РазрешенияВычисляются, а в модуле SOAP-сервиса задать обработчик, который будет выполнять расчет прав доступа. Пример:
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ОбластьВидимости: ВПодсистеме
КонтрольДоступа:
    Вызов: РазрешенияВычисляются
Пример модуля SOAP-сервиса:
@Обработчик
метод ВычислитьРазрешенияДоступа() : Массив<РазрешениеДоступа>

    знч Разрешения: Массив<РазрешениеДоступа>   // массив для возврата разрешений доступа

    // Получить экземпляры ключей доступа
    знч КлючМенеджеров = новый КлючиГруппСотрудников.Объект(ГруппыСотрудников.Менеджеры)
    знч КлючРуководителей = новый КлючиГруппСотрудников.Объект(ГруппыСотрудников.Руководители)

    // Создать разрешение доступа
    Разрешения.Добавить(новый РазрешениеДоступа([КлючМенеджеров, КлючРуководителей], [Сущность.Право.Чтение]))

    возврат Разрешения
;

Настройка прав доступа для отдельной операции сервиса

Чтобы настроить права доступа для отдельной операции, следует добавить группу свойств КонтрольДоступа у нужного обработчика в описании SOAP-сервиса. Пример:
ВидЭлемента: SoapСервис
Ид: 20658364-7777-4b14-9423-ec212de5be72
Имя: СервисМагазина
ОбластьВидимости: ВПодсистеме
КонтрольДоступа:
    Вызов: РазрешеноВсем
ПространствоИменСервиса: https://mycustomshop.ru
ИмяСервиса: ShopService
КорневойUrl: shopservice
Обработчики:
    -
        Имя: AddToCart
        Метод: ДобавитьВКорзину
        Ошибки:
            - СервисМагазина.MyCustomException
        КонтрольДоступа:
            Вызов: РазрешеноАутентифицированным
Если необходимо настроить нестандартный расчет прав доступа, то в группе свойств КонтрольДоступа у нужного обработчика, в свойстве Вызов, следует задать значение РазрешенияВычисляются, а в свойстве Обработчик указать имя обработчика, который будет выполнять расчет прав доступа для вызова данной операции. Код обработчика следует расположить в модуле SOAP-сервиса. Пример:
Обработчики:
    -
        Имя: AddToCart
        Метод: ДобавитьВКорзину
        Ошибки:
            - СервисМагазина.MyCustomException
        КонтрольДоступа:
            Вызов: РазрешенияВычисляются
            Обработчик: ВычислитьРазрешенияДляОперции
Пример модуля SOAP-сервиса:
метод ВычислитьРазрешенияДляОперции(): ЧитаемаяКоллекция<КлючДоступа.Объект>
    возврат [новый МойКлючДоступа.Объект()]
;