Как поддерживать контроль доступа Flask-SSE - PullRequest
0 голосов
/ 26 января 2019

Колба-SSE документ -

https://flask -sse.readthedocs.io / ен / последний / advanced.html # контроля доступа

имеет небольшой пример контроля доступа -

@sse.before_request 
def check_access():
    if request.args.get("channel") == "analytics" and not g.user.is_admin():
        abort(403)

Мой пример использования: у меня есть два типа конечных точек SSE, один тип является общедоступным, скажем, по маршруту /sse/public/notice, который не требует проверки подлинности; а также частные с маршрутами /sse/private/<user_id>/balance, которые я должен проверить оба flask_login.current_user.is_authenticated and flask_login.current_user.get_id() == user_id

На простом примере Flask-SSE я не уверен, как мне добиться поддержки обоих типов конечных точек sse.

Любой указатель будет высоко оценен.

1 Ответ

0 голосов
/ 03 февраля 2019

Я автор Flask-SSE. Почему бы не сделать что-то подобное?

@sse.before_request 
def check_access():
    channel = request.args.get("channel") or "sse"
    if channel.startswith("private."):
        if current_user.is_anonymous:
            abort(401)
        user_id = channel[8:]
        if current_user.get_id() != user_id:
            abort(403)
...