Администрирование REST-сервисов#

Документ описывает механизм администрирования REST-пакетов: как система регистрирует пакеты, как выдаются права на вызов, как хранится информация о доступе. Материал отвечает на вопросы: что такое REST-пакет, как включить контроль серверных полномочий, как выдать права роли, какие классы и таблицы участвуют в процессе.

Класс Btk_AcPackage содержит информацию об администрируемых пакетах:

  • имя пакета;

  • ID модуля, которому он принадлежит;

  • является ли он REST-пакетом (bIsRest);

  • администрируются ли серверные полномочия (bControlServerPriv).

Пакет считается REST-пакетом, если он наследуется от трейта RestPkg, в том числе от его потомков. REST-пакеты регистрируются при обновлении администрируемых объектов по модулю. Если при обновлении окажется, что пакет больше не наследуется от RestPkg, признак bIsRest в таблице будет снят.

Внимание

После изменения статуса администрируемости пакета необходимо сбросить shared-кэш по классу Btk_AcPackage.

Выдача прав на вызов REST-пакетов#

В карточке роли на закладке «Права на REST-пакеты» отображается список пакетов из класса Btk_AcPackage и наличие доступа у роли. Информация о доступе для роли хранится в таблице Btk_AcRolePackagePriv.

Для выбора или снятия доступа роли к пакету используйте чекбокс «Имеет доступ». Во время индексации прав пользователей по роли для всех REST-пакетов, у которых стоит галка «Контролировать серверные полномочия», будут выданы объектные привилегии пользователям, которые имеют данный профиль. Привилегии регистрируются на администрируемый объект Btk_AcPackage.

Примечание

Суперпользователь имеет полный доступ.

Администрирование Rest-методов#

Для более гибкого управления доступом к Rest-пакетам предусмотрено разграничение прав на уровне отдельных методов.

Общая логика#

  1. Разработчик в .pkg.xml файле пакета может объявить список доступных методов в секции <admin><methods>.

  2. Администратор включает ограничение доступа к пакету и указывает, что контроль ведётся на уровне методов (bControlMethods).

  3. Администратор выдает права на вызов конкретных методов роли на закладке Серверные полномочия -> Доступ к пакетам -> Права на вызов методов из Rest

  4. При входящем Rest-запросе (GET или POST) система проверяет наличие прав на указанный метод.

  5. Если методы не объявлены, то разграничение на уровне методов не работает, доступ регулируется только на уровне пакета.

Описание в .pkg.xml#

Пример объявления методов в пакете:

<admin>
    <methods>
        <method caption="Получить пользователей">getUsers</method>
        <method caption="Выполнить jexl через Rest">postExecute</method>
    </methods>
</admin>

Проверка прав при вызове#

В классе ru.bitec.app.gtk.rest.RestPkg методы get и post теперь проверяют наличие привилегии на метод:

  • Добавлен макрос sec, который определяет имя метода и вызывает проверку через ru.bitec.app.btk.Btk_AdminPkg#hasObjPriv.

  • При отсутствии прав генерируется ошибка:

    У пользователя <username> нет прав на вызов <methodName> сервиса <Имя пакета>
    

Пример использования#

def getUsers(it: RestPathBuilder): Unit = sec {
    // обработка
}