Дерево страниц

Рекомендуем к прочтению: Получение id сессии


Продолжим работать с примером кода, разобранным в статье 1. Создание API

from exthttp import create_app, BaseHandler
from exthttp import http
 
app = create_app("ExampleApp")
 
 
@app.route("hello")
class HelloWorldHandler(BaseHandler):
    def get(self, request, *args, **kwargs):
        return http.JsonResponse({"message": "Hello World"})

Созданное приложение по умолчанию не требует авторизации.

Вы можете ограничить доступ глобально для всего приложения если установить параметр app.need_auth = True

Также необходимость авторизации можно включить/отключить для отдельного метода get/post
для этого задайте атрибут need_auth для соответствующего метода.

В примере кода ниже мы отключим глобальную авторизацию в приложении, но включим ее для метода post

from exthttp import create_app, BaseHandler
from exthttp import http
 
app = create_app("ExampleApp")
app.need_auth = False
 
 
@app.route("hello")
class HelloWorldHandler(BaseHandler):
    def get(self, request, *args, **kwargs):
        return http.JsonResponse({"message": "Hello World"})

    def post(self, request, *args, **kwargs):
        return http.JsonResponse({"message": "Private Method"})
    
    post.need_auth = True

Обратите внимание, что данная запись не проверяет права пользователя, под которым авторизуется пользователь. 
Данная запись проверят только сам факт авторизации.

Объект пользователя от имени которого происходит запрос хранится в request.user и имеет следующие атрибуты:

  • is_superuser - True если пользователь Admin
  • has_view_rights - True если пользователь имеет права на просмотр
  • has_modify_rights - True если пользователь имеет права на управление
  • has_setup_rights - True если пользователь имеет права на настройку

Ниже пример кода, где мы разрешим post запрос только для пользователей с правами на управление

from exthttp import create_app, BaseHandler
from exthttp import http
 
app = create_app("ExampleApp")
app.need_auth = False
 
 
@app.route("hello")
class HelloWorldHandler(BaseHandler):
    def get(self, request, *args, **kwargs):
        return http.JsonResponse({"message": "Hello World"})

    def post(self, request, *args, **kwargs):
        if request.user.has_modify_rights:
            return http.JsonResponse({"message": "Private Method"})
        return http.JsonResponse({"error": "Forbidden"}, status=403)
    
    post.need_auth = True