API документация¶
Настройка прав доступа по URL¶
- Следует различать несколько видов URL, отличающихся доступностью:
открытый - URL доступный всем без авторизации;
закрытый - URL доступный только авторизованным пользователям;
ограниченный - URL доступный только авторизованным пользователям, с определенными ролями.
Для создания URL с закрытым вариантом доступа требуется указать специальный декоратор перед определением обработчика URL.
Специальный декоратор можно получить с помощью функции get_auth_decorator из API приложения (модуль app_api в корне приложения).
Пример кода обработчика URL:
_auth_decorator = app_api.get_auth_decorator()
@mod.route('/test/handler', methods=['GET'])
@_auth_decorator
def test_handler():
"""
Тело обработчика
"""
return ''
Для создания URL с ограниченным вариантом доступа помимо использования специального декоратора, как в закрытом варианте, требуется указать роль(роли) для которых будет доступен данный URL.
Указать перечень ролей для доступа к определенному URL возможно только в dublin.ttl с помощью отношения splm:isAvailableFor
, например:
splm:mod_url splm:isAvailableFor “role”
.
где splm:mod_url - URL модуля для которого требуется предоставить для определенной роли, а “role” наименование роли которой требуется предоставить доступ (возможность получить ответ от сервера по указанному URL).
Для предоставления доступа к URL больше чем одной роли требуется повторить запись по количеству ролей в dublin.ttl.
Важно! При отрисовке страницы вывод элементов навигации учитывает роли, указанные для URL и отображает только те элементы, которые доступны текущему пользователю на основании ролей.
Осторожно
Проверка на соответствие ролей для URL с ролями назначенными текущему пользователю находится в зоне ответственности разработчика обработчика URL.
Пример кода проверки ролей текущего пользователя:
if g.user:
if g.user.has_role('role'):
Событийная модель в SPLM¶
SPLM поддерживает функционал регистрации и обработки событий - EventManager
.
- Для регистрирации события необходимо задать параметры:
event_name
- название событияhandler
- функцию-обработчик, которая будет вызвана при отработке события
- Функция-обработчик принимает два аргумента:
event
- экземпляр событияdata
- данные, переданные обработчику в момент возникновения события.
и возвращает переменную data в том же виде, в котором она была получена.
- Для отработки события передать параметры:
event_name
- название событияdata
- данные, которые будут переданы обработчику
Все очень просто!
Пример:¶
Для начала зарегистрируем наше событие с именем "event_test"
и обработчиком event_test_hadler()
Получаем экземпляр EventManager
:
from app.app_api import get_event_manager
event_manager = get_event_manager()
Описываем обработчик и регистрируем событие:
def event_test_hadler(event, data):
....
return data
event_manager.register_event("event_test", event_test_hadler)
С этого момента будет запущен процесс, который слушает наше событие.
В случае регистрации нескольких обработчиков на одно событие они будут выполняться последовательно в том порядке, в котором были зарегистрированы. Результат предыдущего обработчика передается на вход следующему.
При возникновении ошибки (ошибка исполнения кода) при выполнении обработчика цепочка выполнения не прерывается. Входные данные для обработчика с ошибкой (ошибка исполнения кода) передаются следующему в очереди обработчику.
Теперь, чтобы наше событие "event_test"
отработало, вызовем его, передав параметры params
для функции-обработчика event_test_hadler()
.
Здесь data
- это результат работы обработчика:
data = event_manager.raise_event("event_test", params)
Все. Теперь при отработке метода raise_event
возникнет событие "event_test"
и будет вызвана функция-обработчик event_test_hadler()
.