Администрирование 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-пакетам предусмотрено разграничение прав на уровне отдельных методов.
Общая логика#
Разработчикв.pkg.xmlфайле пакета может объявить список доступных методов в секции<admin><methods>.Администраторвключает ограничение доступа к пакету и указывает, что контроль ведётся на уровне методов (bControlMethods).Администраторвыдает права на вызов конкретных методов роли на закладкеСерверные полномочия->Доступ к пакетам->Права на вызов методов из RestПри входящем Rest-запросе (GET или POST) система проверяет наличие прав на указанный метод.
Если методы не объявлены, то разграничение на уровне методов не работает, доступ регулируется только на уровне пакета.
Описание в .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 {
// обработка
}